Расширение Maven и Java - PullRequest
       21

Расширение Maven и Java

0 голосов
/ 25 сентября 2018

Я пытаюсь собрать и протестировать приложение JavaFX на автономном сервере сборки.Локально я использую TestFX и Monocle https://github.com/TestFX/Monocle и работает нормально.Однако мне пришлось вручную установить Monocle в папку java Extensions в соответствии с этим вопросом: JavaFX + maven + TestFX + monocle не работают вместе

Теперь мне нужно использовать сборку без головысервер для автоматизации нашего развертывания.Я не могу понять, как правильно установить это расширение Java с Maven, не делая это вручную.Похоже, это правильная функция: https://maven.apache.org/pom.html#Extensions,

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

, но тесты не выполняются с NoClassDefFoundException (что не происходит, если я вручную встраиваю флягу в расширения).Я не знаю, как отладить это, или я даже использую правильную функцию.Какие-либо предложения?

1 Ответ

0 голосов
/ 26 сентября 2018

У меня была похожая головная боль некоторое время назад.Я решил это, скопировав 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>

В моем случае я скопировал банку с моноклем из maven в папку src/test/resources.Это может быть улучшено с помощью Maven Dependency Plugin , чтобы скопировать банку монокля напрямую с maven, вместо этого, указав ее в src/test/resources.

...