Bitbucket 的管道与 Java Maven 项目和 JFX
Bitbucket's pipelines with Java Maven project and JFX
我的团队和我有一个使用 jdk1.8(未打开 jdk)和 javaFX 的 maven 项目 UI。它运行良好,还有很多工作要做,我们想使用 Bitbucket 的管道在移动中进行持续集成。
我尝试使用一个简单的 .yml 文件:
image: maven:3.3.9-jdk-8
pipelines:
default:
- step:
caches:
- maven
script: # Modify the commands below to build your repository.
- mvn -B verify # -B batch mode makes Maven less verbose
但我的问题是,我们正在使用 IntelliJ 和 jdk1.8 进行开发,其中 javaFX 是标准的并自动包含在项目中。但是管道试图使用 openjdk1.8,并且找不到 javaFX 类(尤其是 jfxrt.jar 文件)。
如果我什么都不做并按原样尝试,Maven 错误是:
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[3,26] package javafx.application does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[4,19] package javafx.fxml does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[5,20] package javafx.scene does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[6,20] package javafx.scene does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[7,20] package javafx.stage does not exist
我试图将 jfxrt.jar 文件包含到我的 pom.xml 作为系统依赖项的 Maven 中:
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>${java.version}</version>
<scope>system</scope>
<systemPath>${java.home}/lib/ext/jfxrt.jar</systemPath>
</dependency>
但是 Maven 警告我他没有找到 jfxrt.jar 文件:
[WARNING] 'dependencies.dependency.systemPath' for javafx:jfxrt:jar refers to a non-existing file /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar @ line 34, column 25
主要是因为他用的是openjdk而不是jdk.
我还尝试将 jfxrt.jar 文件放入存储库中并对其建立依赖关系,它可以工作,但 Maven 警告我这样做是不合适的:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>javafx</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${basedir}/dependency/jfxrt.jar</systemPath>
</dependency>
和警告:
[WARNING] 'dependencies.dependency.systemPath' for com.oracle:javafx:jar should not point at files within the project directory, ${basedir}/dependency/jfxrt.jar will be unresolvable by dependent projects @ line 34, column 25[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
我的问题是如何强制 Maven 使用 JDK 而不是 OpenJDK,或者如何很好地依赖 javaFX 以便 Maven 可以在我们每次推送时验证我们的项目而不是警告我们.
谢谢大家以后的回复。
由于 Oracle Java 的许可,Docker Hub 不再托管包含 Oracle JDK 的官方图像。所有官方图像,包括 the Maven one you're using,现在都基于 OpenJDK。
要使用 Oracle Java,您需要 build your own Docker image as the Pipelines build environment(相对简单),或者为 Docker 图像中的 JDK 找到可信来源它。 (通过 Google 搜索很容易找到这些,因为这是一个常见问题。)
第一:JavaFX 是 OpenJDK 的一部分。自管道公开测试版以来,此设置对我有用:
yaml 文件
image: maven:3.3.3
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- mvn clean install
这里是 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>my.artifact.id</artifactId>
<name>my.app.name</name>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- goal is 'mvn jfx:jar' -->
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.7.0</version>
<configuration>
<mainClass>package.to.my.main.class</mainClass>
</configuration>
<executions>
<execution>
<id>create-jfxjar</id>
<phase>package</phase>
<goals>
<goal>build-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我的团队和我有一个使用 jdk1.8(未打开 jdk)和 javaFX 的 maven 项目 UI。它运行良好,还有很多工作要做,我们想使用 Bitbucket 的管道在移动中进行持续集成。
我尝试使用一个简单的 .yml 文件:
image: maven:3.3.9-jdk-8
pipelines:
default:
- step:
caches:
- maven
script: # Modify the commands below to build your repository.
- mvn -B verify # -B batch mode makes Maven less verbose
但我的问题是,我们正在使用 IntelliJ 和 jdk1.8 进行开发,其中 javaFX 是标准的并自动包含在项目中。但是管道试图使用 openjdk1.8,并且找不到 javaFX 类(尤其是 jfxrt.jar 文件)。
如果我什么都不做并按原样尝试,Maven 错误是:
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[3,26] package javafx.application does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[4,19] package javafx.fxml does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[5,20] package javafx.scene does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[6,20] package javafx.scene does not exist
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/JFX/MainJFX.java:[7,20] package javafx.stage does not exist
我试图将 jfxrt.jar 文件包含到我的 pom.xml 作为系统依赖项的 Maven 中:
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>${java.version}</version>
<scope>system</scope>
<systemPath>${java.home}/lib/ext/jfxrt.jar</systemPath>
</dependency>
但是 Maven 警告我他没有找到 jfxrt.jar 文件:
[WARNING] 'dependencies.dependency.systemPath' for javafx:jfxrt:jar refers to a non-existing file /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar @ line 34, column 25
主要是因为他用的是openjdk而不是jdk.
我还尝试将 jfxrt.jar 文件放入存储库中并对其建立依赖关系,它可以工作,但 Maven 警告我这样做是不合适的:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>javafx</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${basedir}/dependency/jfxrt.jar</systemPath>
</dependency>
和警告:
[WARNING] 'dependencies.dependency.systemPath' for com.oracle:javafx:jar should not point at files within the project directory, ${basedir}/dependency/jfxrt.jar will be unresolvable by dependent projects @ line 34, column 25[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
我的问题是如何强制 Maven 使用 JDK 而不是 OpenJDK,或者如何很好地依赖 javaFX 以便 Maven 可以在我们每次推送时验证我们的项目而不是警告我们.
谢谢大家以后的回复。
由于 Oracle Java 的许可,Docker Hub 不再托管包含 Oracle JDK 的官方图像。所有官方图像,包括 the Maven one you're using,现在都基于 OpenJDK。
要使用 Oracle Java,您需要 build your own Docker image as the Pipelines build environment(相对简单),或者为 Docker 图像中的 JDK 找到可信来源它。 (通过 Google 搜索很容易找到这些,因为这是一个常见问题。)
第一:JavaFX 是 OpenJDK 的一部分。自管道公开测试版以来,此设置对我有用:
yaml 文件
image: maven:3.3.3
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- mvn clean install
这里是 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>my.artifact.id</artifactId>
<name>my.app.name</name>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- goal is 'mvn jfx:jar' -->
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.7.0</version>
<configuration>
<mainClass>package.to.my.main.class</mainClass>
</configuration>
<executions>
<execution>
<id>create-jfxjar</id>
<phase>package</phase>
<goals>
<goal>build-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>