1

我正在尝试在无头构建服务器上构建和测试 JavaFX 应用程序。在本地,我正在使用 TestFX 和 Monocle https://github.com/TestFX/Monocle并且工作正常。但是,我不得不根据这个问题手动将 Monocle 安装到 java Extensions 文件夹中:JavaFX + maven + TestFX + monocle don't work together

现在我需要使用无头构建服务器来自动化我们的部署。我无法弄清楚如何使用 Maven 正确安装此 Java 扩展,而无需手动进行。这似乎是正确的功能:https://maven.apache.org/pom.html#Extensions

<extensions>
    <extension>
        <groupId>org.testfx</groupId>
        <artifactId>openjfx-monocle</artifactId>
        <version>8u76-b04</version>
    </extension>
</extensions>  

但是测试失败并出现 NoClassDefFoundException (如果我手动将 jar 构建到扩展中,则不会发生这种情况)。我不知道如何调试它,或者我是否使用了正确的功能。有什么建议么?

4

1 回答 1

0

前段时间我也有类似的头痛。我通过将openjfx-monocle扩展文件夹中的扩展名和所有扩展名都复制到下面的文件夹中来解决它/target,然后将扩展名系统属性设置为该路径。这样我就可以避免NoClassDefFoundException并成功地在 Jenkins 上运行所有测试。这是个人资料部分:

<!--
  This profile is used to make headless tests work with the Monocle Platform.
  It first copies the extensions from the JDK to the target/java-extensions folder.
  Then copies the openjfx-monocle implementation to the same folder.
  Afterwards it sets the extensions path to the folder with the copied extensions and the monocle platform.
-->
<profile>
  <id>headless-tests</id>
  <activation>
    <property>
      <name>headless.tests</name>
      <value>true</value>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <executions>

          <execution>
            <id>copy-external-jars</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>target/java-extensions</outputDirectory>
              <resources>
                <resource>
                  <directory>${java.home}/lib/ext/</directory>
                </resource>
              </resources>
            </configuration>

          </execution>

          <execution>
            <id>copy-monocle-to-extensions</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>target/java-extensions</outputDirectory>
              <resources>
                <resource>
                  <directory>src/test/resources/test-lib</directory>
                  <includes>
                    <include>openjfx-monocle-8u76-b04.jar</include>
                  </includes>
                </resource>
              </resources>
            </configuration>
          </execution>

        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration>
          <argLine>-Djava.ext.dirs=${project.basedir}/target/java-extensions</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

就我而言,我从src/test/resources文件夹中的 maven 复制了单片眼镜 jar。这可以通过使用Maven 依赖插件直接使用 maven 复制单片眼镜 jar 而不是将其放入src/test/resources.

于 2018-09-25T21:19:56.753 回答