【问题标题】:How to get Azure Pipelines to recognize JavaFX dependency with Gradle如何让 Azure Pipelines 使用 Gradle 识别 JavaFX 依赖项
【发布时间】:2020-10-30 16:06:53
【问题描述】:

我一直无法让 Azure Pipelines 按我预期的方式运行。

项目代码库采用 Java 版本 8 并使用 JavaFX 库。

我正在尝试通过 Azure Pipelines 引入持续集成。为此,我决定使用 Gradle 来管理项目依赖项。

这是我用来声明项目依赖项的 gradle.build 文件。

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.1.1/userguide/tutorial_java_projects.html
 */

plugins {
    // Apply the java plugin to add support for Java
    id 'java'

    // Apply the application plugin to add support for building a CLI application.
    id 'application'
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    mavenLocal()
    mavenCentral()
    jcenter()
}

dependencies {
    // This dependency is used by the application.
    implementation 'com.google.guava:guava:28.1-jre'
    implementation 'de.dynamicfiles.projects.gradle.plugins:javafx-gradle-plugin:8.8.2'

    // Use JUnit Jupiter API for testing.
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'

    // Use JUnit Jupiter Engine for testing.
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
}

application {
    // Define the main class for the application.
    mainClassName = 'main.java.application.App'
}

test {
    // Use junit platform for unit tests
    useJUnitPlatform()
}

这是我运行管道时出现的错误。这是从我的电脑上运行的。

Code\SNR-Project\Anature> ./gradlew build

>Downloading https://services.gradle.org/distributions/gradle-6.1.1-bin.zip
>.........10%.........20%.........30%..........40%.........50%
>.........60%..........70%.........80%.........90%.........100%
>
>Welcome to Gradle 6.1.1!
>
>Here are the highlights of this release:
> 
> - Reusable dependency cache
> - Configurable compilation order between Groovy/Kotlin/Java/Scala
> - New sample projects in Gradle's documentation
>
>For more details see https://docs.gradle.org/6.1.1/release-notes.html
>
>Starting a Gradle Daemon (subsequent builds will be faster)
>
> Task :compileTestJava FAILED
>
>Code\SNR-Project\Anature\src\test\java\applicationTests\AppTest.java:16: error: >cannot find symbol
>        asserNotNull(classUnderTest.getGreeting(), "app should have a greeting");
>        ^
>  symbol:   method asserNotNull(String,String)
>  location: class AppTest
>1 error
>
>FAILURE: Build failed with an exception.
>
>* What went wrong:
>Execution failed for task ':compileTestJava'.
> Compilation failed; see the compiler error output for details.
>
>* Try:
>Run with --stacktrace option to get the stack trace. Run with --info or --debug >option to get more log output. Run with --scan to get full insights.
>
>* Get more help at https://help.gradle.org
>
>BUILD FAILED in 31s
>6 actionable tasks: 6 executed

这是我在运行管道时遇到的错误。这是在 Microsoft 托管的 VM 中运行的。

>##[section]Starting: Gradle
>==============================================================================
>Task         : Gradle
>Description  : Build using a Gradle wrapper script
>Version      : 2.163.0
>Author       : Microsoft Corporation
>Help         : >https://docs.microsoft.com/azure/devops/pipelines/tasks/build/gradle
>==============================================================================
>SYSTEMVSSCONNECTION exists true
>[command]/home/vsts/work/1/s/Anature/gradlew --refresh-dependencies build
>Downloading https://services.gradle.org/distributions/gradle-6.1.1-bin.zip
>.........10%.........20%.........30%..........40%.........50%
>.........60%..........70%.........80%.........90%.........100%
> 
>Welcome to Gradle 6.1.1!
> 
>Here are the highlights of this release:
>  - Reusable dependency cache
>  - Configurable compilation order between Groovy/Kotlin/Java/Scala
>  - New sample projects in Gradle's documentation
> 
> For more details see https://docs.gradle.org/6.1.1/release-notes.html
> 
> Starting a Gradle Daemon (subsequent builds will be faster)
> 
> > Task :compileJava
> /home/vsts/work/1/s/Anature/src/main/java/application/Player.java:5: error: >package javafx.scene.image does not exist
> import javafx.scene.image.Image;
>                          ^
> /home/vsts/work/1/s/Anature/src/main/java/application/Player.java:12: error: >cannot find symbol
>   private Image sprite; 
>           ^
>   symbol:   class Image
>   location: class Player
> 2 errors
> 
> > Task :compileJava FAILED
> 
> FAILURE: Build failed with an exception.
> 
> * What went wrong:
> Execution failed for task ':compileJava'.
> > Compilation failed; see the compiler error output for details.
> 
> * Try:
> Run with --stacktrace option to get the stack trace. Run with --info or -->debug option to get more log output. Run with --scan to get full insights.
> 
> * Get more help at https://help.gradle.org
> 
> BUILD FAILED in 14s
> 1 actionable task: 1 executed
> Error: The process '/home/vsts/work/1/s/Anature/gradlew' failed with exit >code 1
>     at ExecState._setResult (/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94->4c97-85af-839254cc6da4/2.163.0/node_modules/azure-pipelines-task->lib/toolrunner.js:816:25)
>     at ExecState.CheckComplete (/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94->4c97-85af-839254cc6da4/2.163.0/node_modules/azure-pipelines-task->lib/toolrunner.js:799:18)
>     at ChildProcess.<anonymous> (/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94->4c97-85af-839254cc6da4/2.163.0/node_modules/azure-pipelines-task->lib/toolrunner.js:721:19)
>     at emitTwo (events.js:106:13)
>     at ChildProcess.emit (events.js:191:7)
>     at maybeClose (internal/child_process.js:920:16)
>     at Process.ChildProcess._handle.onexit (internal/child_process.js:230:5)
> No test result files matching /home/vsts/work/1/s/**/TEST-*.xml were found, >so publishing JUnit test results is being skipped.
> ##[error]Error: The process '/home/vsts/work/1/s/Anature/gradlew' failed with >exit code 1
> ##[section]Finishing: Gradle

所以问题是在管道中它抛出一个错误,指出 JavaFX 导入不存在。理论上什么时候

./gradle build

应该在 Microsoft VM 上安装运行代码所需的库。

以防万一有人对这里感兴趣是我的 azure-pipelines.yaml

trigger:
  - master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: Gradle@2
  inputs:
    gradleWrapperFile: 'Anature/gradlew'
    workingDirectory: 'Anature'
    options: '--refresh-dependencies' 
    tasks: 'build'
    publishJUnitResults: true
    testResultsFiles: '**/TEST-*.xml'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    sonarQubeRunAnalysis: false

在这里你可以看到我正在尝试强制安装所有依赖项,但仍然得到一个

package javafx.scene.image does not exist

这里有一些参考链接:

用于 Azure Gradle 任务。 https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/gradle?view=azure-devops

Azure 虚拟机规格: https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu1804-README.md

Gradle 依赖信息: https://docs.gradle.org/current/userguide/declaring_dependencies.html

更新:

我必须首先弄清楚 azure 管道 VM 有哪些库存,以及 JavaFX 为何不工作。

这里是下载 Azure VM 上的 Java 1.8 版本的链接。

http://repos.azul.com/azure-only/zulu/packages/zulu-8/8u222/

下载 Java 版 Zulu 包后,您会发现 JavaFX 不像 Java JDK 那样包含在 Java 下载中。

【问题讨论】:

  • 请避免链接到(代码-)屏幕截图,并直接在您的问题中发布您的代码。
  • @Neo 我删除了图像。感谢您的反馈。
  • 请尝试将 system.debug 设置为 True 并共享整个日志。
  • @HunterMatthewRich 你试过安装openjfx吗?有效吗?
  • @CeceDong-MSFT 这周我会试试的。我正在对 VM 上的库存进行一些研究,并将在本周晚些时候用我的发现更新我的帖子。

标签: java azure gradle javafx-8 azure-pipelines


【解决方案1】:

您可以尝试安装openjfx 看看问题是否仍然存在:

sudo apt-get install openjfx

【讨论】:

  • 我无法让它工作。我认为这可能是路径变量问题。由于之前的 Java 1.8 bin 还在 Path 中。我正在使用 Chocolatey 来安装 java jdk 而不是 openjfx,并且我已经切换到 windows-latest VM 而不是使用 ubuntu。
  • 你使用chocolatey安装java jdk并切换到windows-latest VM后问题解决了吗?
【解决方案2】:

我遇到了同样的问题,这对我有用。

  • 从 Azure MarketPlace 安装 Chocolatey

  • 添加chocolatey作为安装jdk8的任务

  • 使用以下命令添加 PS 任务以调整路径变量

´´´

$newpath = “C:\Program Files\Java\jdk1.8.0_211”
Write-Host "##vso[task.setvariable variable=PATH;]${env:PATH};$newPath";
Write-Host "##vso[task.setvariable variable=JAVA_HOME;]$newPath";
Write-Host "##vso[task.setvariable variable=JDK_18_x64;]$newPath";

´´´

环境变量的持续变化有点让人头疼,因为周围有很多信息在这种情况下无济于事。最终帮助我的是这里的这篇文章:

Set "Path" environment variable during vsts build so it would persist across build tasks specifically vsTest task

【讨论】:

    猜你喜欢
    • 2016-11-05
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2012-02-22
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    相关资源
    最近更新 更多