web-dev-qa-db-ja.com

Maven surefireとJDK 11

Maven surefireをJDK 11で実行しようとしていますが、次のエラーが発生し続けます:

  1. reuseForksをtrueに設定した場合:
  Error occurred in starting fork, check output in log
  Process Exit Code: 1
  at org.Apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.Java:670)
  at org.Apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.Java:283)
  at org.Apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.Java:246)
  1. Falseに設定した場合:
Execution default-test of goal org.Apache.maven.plugins:maven-surefire-   plugin:3.0.0-M1:test
failed: Java.lang.ClassNotFoundException: org.Apache.maven.plugin.surefire.StartupReportConfiguration

同じ問題を説明する this および this リンクを見つけましたが、それらには解決策がありません。

このバグを複製するために作成した this git repo

7
Gnas

testにモジュラープロジェクトを使用しているときに、forkCount0として設定する必要があるようです。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M1</version>
    <configuration>
        <forkCount>0</forkCount> <!-- changed this to 0 -->
        <reuseForks>false</reuseForks>
        <!-- <threadCount>1</threadCount> --> <!-- shall be used with 'parallel' -->
        <printSummary>true</printSummary>
        <!-- <skipTests>false</skipTests> --> <!-- defaults to false -->

        <!-- run test in headless mode -->
        <systemPropertyVariables>
            <glass.platform>Monocle</glass.platform>
            <monocle.platform>Headless</monocle.platform>
            <prism.order>d3d</prism.order>
        </systemPropertyVariables>

        <argLine>
            --add-exports javafx.graphics/com.Sun.javafx.application=ALL-UNNAMED
            --add-exports javafx.graphics/com.Sun.glass.ui=ALL-UNNAMED
        </argLine>
    </configuration>
</plugin>

引用 この記事から

module-info.Javaが存在し、forkプロセスがenabledの場合、surefireはモジュールと名前のないモジュールを含むmixedクラスパスを作成し、モジュールを引き起こします可視性の問題とアプリケーションの起動の妨げ。


forkCountおよびreuseForks構成パラメーターの無効化、 SUREFIRE-1528 で報告されたものと同様に、org.Apache.maven.surefire.booter.SurefireBooterForkExceptionがスローされます。

これがMavenコミュニティの開発者に役立つ場合、同じ実行からの実行ダンプは次のようになります。

# Created at 2018-11-23T09:31:53.631
Corrupted STDOUT by directly writing to native stream in forked JVM 1. Stream 'Error occurred during initialization of boot layer'.
Java.lang.IllegalArgumentException: Stream stdin corrupted. Expected comma after third character in command 'Error occurred during initialization of boot layer'.
    at org.Apache.maven.plugin.surefire.booterclient.output.ForkClient$OperationalData.<init>(ForkClient.Java:507)
    at org.Apache.maven.plugin.surefire.booterclient.output.ForkClient.processLine(ForkClient.Java:210)
    at org.Apache.maven.plugin.surefire.booterclient.output.ForkClient.consumeLine(ForkClient.Java:177)
    at org.Apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.run(ThreadedStreamConsumer.Java:88)
    at Java.base/Java.lang.Thread.run(Thread.Java:834)

これがソースリポジトリのコード行です。

11
Naman

私はここに解決策を見つけました:

https://winterbe.com/posts/2018/08/29/migrate-maven-projects-to-Java-11-jigsaw/

追加しなければなりませんでした。

<argLine>
    --illegal-access=permit
</argLine>
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.0</version>
    <configuration>
        <argLine>
            --illegal-access=permit
        </argLine>
    </configuration>
</plugin>
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.22.0</version>
    <configuration>
        <argLine>
            --illegal-access=permit
        </argLine>
    </configuration>
</plugin>