0

我正在尝试使用 bitbucket 管道构建 JavaFx 项目。为此,我使用 maven:3-jdk-8 docker 映像。此 Docker 映像使用 OpenJDK 8 而不是 Oracle 的(由于 lincensing 问题)不包括 JavaFx 部分。请注意,我必须使用 Java 8 来构建我的项目!我遇到的问题是我无法单独使用该 docker 映像构建应用程序。

正如对同一问题的回答(https://stackoverflow.com/a/40167253/2000338)中提出的那样:我尝试使用此 bitbucket-pipelines.yml 来尝试克服这种情况:

image: maven:3-jdk-8

pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          - apt-get update
          - apt-get install -y openjfx
          - mvn clean install # -B batch mode makes Maven less verbose

在第 2 步中,似乎 openjfx 已正确安装。但在第 3 步中,我收到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project ***********: Compilation failure: Compilation failure: 
[ERROR] /opt/atlassian/pipelines/agent/build/src/main/java/********/******/****/MainFx.java:[7,26] package javafx.application does not exist

它似乎仍在抱怨缺少 JavaFx 库,但我不知道为什么。在我的开发人员机器(Windows 7,jdk1.8.0_221)上,我可以毫无问题地执行 maven build。

4

1 回答 1

2

以前的方法中缺少的是 javafx 库不在类路径上。基本上为了使 Maven 构建工作,我必须将 jfxrt.jar 添加到类路径中。我发现maven:3-jdk-8在安装 javafx 后的图像中,可以在以下位置找到该库: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar

在构建运行期间将此文件添加到类路径中就可以了。

一个想法(对我有用)是将这个库作为范围包含在应用程序 pom/dependecy 部分中system

就我而言,我为此做了一个 Maven 配置文件:

    <profiles>
    <profile>
        <id>docker_build</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <dependencies>
            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>javaFX</artifactId>
                <version>2.2</version>
                <scope>system</scope>
                <systemPath>${javafx-location}</systemPath>
            </dependency>
        </dependencies>
    </profile>
</profiles>

为了运行这个 maven 构建,你必须发出正确的 maven 命令来添加这个配置文件。例如

mvn clean install -P docker_build -Djavafx-location=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar

为了简化这一点,我使用以下 Dockerfile 制作了一个 Docker 映像:

FROM maven:3-jdk-8
RUN apt-get update && \
    apt-get install -y --no-install-recommends openjfx
COPY settings.xml /root/.m2/

它使用以下 maven settings.xml 文件:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>/usr/share/maven/ref/repository</localRepository>
    <activeProfiles>
        <activeProfile>docker_build</activeProfile>
    </activeProfiles>
    <profiles>
        <profile>
            <id>docker_build</id>
        <properties>
            <javafx-location>/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar</javafx-location>
        </properties>
        </profile>
    </profiles>
</settings>

如果有人觉得它有用,我还将它发布到 Docker 中心: https ://hub.docker.com/r/brzigonzales/maven-javafx

于 2019-08-06T13:41:18.520 回答