この問題を解決するのを手伝ってください。ログのエラーの意味を正確に理解していません。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 21.749s
[INFO] Finished at: Thu Apr 24 10:10:20 IST 2014
[INFO] Final Memory: 15M/37M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-surefire-plugin:2.15:test (default-test) on project samples.simpleforwarding: Execution default-test of goal org.Apache.maven.plugins:maven-surefire-plugin:2.15:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
[ERROR] Command wascmd.exe /X /C ""C:\Program Files\Java\jdk1.7.0_55\jre\bin\Java" -Xmx1024m -XX:MaxPermSize=256m -jar E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefirebooter53410321571238933.jar E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefire86076271125218001tmp E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefire_01846991116135903536tmp"
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/PluginExecutionException
私は同じ問題を抱えていて、追加することで解決しました:
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
プラグイン要素全体は次のとおりです。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>3</forkCount>
<reuseForks>true</reuseForks>
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
</configuration>
</plugin>
今日(2018年10月30日)に、このエラーでJenkinsでビルドが壊れていることに気付きました。
このエラーは少し誤解を招きやすいため、target/surefire-reports/
のダンプの出力を見て、次のエラーメッセージを確認する必要があります。
Error: Could not find or load main class org.Apache.maven.surefire.booter.ForkedBooter
それが次のSO投稿につながりました。この投稿では、OpenJDK 181で起こりうるバグについて言及しています。 Maven surefireはForkedBooterクラスを見つけることができませんでした
その投稿の修正のいずれかが私の問題を解決します。具体的には、次のいずれかを使用しました。
maven:3.5.4-jdk-8
からmaven:3.5.4-jdk-8-Alpine
への切り替え私は非常に似た問題を抱えています( Mavenビルドとmaven-failsafe-plugin-フォークVMはさよならを言わずに終了しました )、私のために働く3つのソリューションを見つけました:
問題は、バージョン2.20.1および2.21.0のmavenプラグインmaven-surefire-pluginのみです。チェックして、バージョン2.20.1を使用します。
プラグインのバージョンを2.22.0にアップグレードします。アドインpom.xml:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
プラグインのバージョンを2.20にダウングレードします。アドインpom.xml:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
</plugin>
プラグイン構成を使用しますtestFailureIgnore。アドインpom.xml:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
私の場合、この問題はIntelliJ IDEA console(OS windows 10)へのログ出力が長すぎることに関連していました。
コマンド:
mvn clean install
このコマンドは私に問題を解決しました:
mvn clean install > log-file.log
Surefire FAQ のこの部分はあなたを助けることができます:
「ファイアドVMが適切にさよならを言わずに終了しました」というメッセージで確実に失敗します
Surefireは、いつでもSystem.exit()を呼び出すテストまたは参照ライブラリをサポートしません。そうする場合、彼らはsurefireと互換性がなく、おそらくライブラリ/ベンダーに問題を報告する必要があります。あるいは、分岐したVMもいくつかの理由でクラッシュする可能性があり、この問題も発生する可能性があります。 VMクラッシュを示す従来の「hs_err *」ファイルを探すか、テストの実行時にmavenを実行してログ出力を調べます。クラッシュしたプロセスからの「異常な」出力がコンソール/ログにダンプされる場合があります。これがCI環境で発生し、しばらく実行した後にのみ、テストスイートがOSレベルのリソースをリークし、実行ごとに事態が悪化する可能性がかなりあります。通常のosレベルの監視ツールを使用すると、いくつかの指標が得られる場合があります。
ちょうど同じ問題に直面していた、ubuntuのJava 8
その後、出会いました https://stackoverflow.com/a/53016532/1676516
Java 8のsurefireプラグインバージョン2.22.1の最近のバグのようです https://issues.Apache.org/jira/browse/SUREFIRE-1588
ローカルmvn設定~/.m2/settings.xml
を介して推奨される回避策に従いました
<profiles>
<profile>
<id>SUREFIRE-1588</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
</properties>
</profile>
</profiles>
JDK 1.8.0 _65でJacocoプラグインを使用してmvnコマンドを実行すると、同様の問題が発生しました
[INFO]
A fatal error has been detected by the Java Runtime Environment:
JRE version: Java(TM) SE Runtime Environment (8.0_65-b17) (build 1.8.0_65-b17).........
Problematic frame:
PhaseIdealLoop::build_loop_late_post(Node*)+0x144
............
............
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-surefire-plugin:2.19:test (default-test) on project
The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
JDKにバグがありました https://bugs.openjdk.Java.net/browse/JDK-8081379
そして解決策は、param-XX:-UseLoopPredicateでmvn clean installを実行することでした
または、JDKを更新するだけです(新しいマイナーバージョンが機能すると思います)。
今日も同じ問題が発生しましたが、実際の問題はログに記録され、メッセージCannot use a threadCount parameter less than 1; 1 > 0
でさらに報告されました。 surefire-plugin構成に<threadCount>1</threadCount>
を追加すると、他のエラーが消えました。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.18.1</version>
</dependency>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-testng</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
<configuration>
<threadCount>1</threadCount>
</configuration>
</plugin>
...はい、私は後方互換性のためにこのテストフレームワークでjunitとtestngの両方を使用しています。
誰かがカスタムargLine引数を含めている場合、メモリ割り当ての問題の原因である可能性が高いため、再検討する必要があります。
例(私が持っていた):
<argLine>XX:MaxPermSize=4096m ${argLine}</argLine>
今、私はハード指定された値を使用します:
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
何らかの理由で、JacocoなどのSurefireと統合するアプリケーションは、ビルド時に発生するテストと共存するために十分なメモリを要求しません。
Maven-surefile-pluginのuseSystemClassLoaderをオフにしてください。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
Jenkins Dockerコンテナでもこの問題に遭遇しました(jenkins:lts、jenkins、jenkins:slim、jenkins:slim-ltsを試してみました。すべてのリポジトリを調べて各プロジェクトのpomを更新したくなかったので、 disableClassPathURLCheckをmavenコマンドライン呼び出しに追加しました。
mvn test -DargLine="-Djdk.net.URLClassPath.disableClassPathURLCheck=true"
マシンが64ビットか32ビットかを確認する必要があります。マシンが32ビットの場合、メモリ引数は4 GB未満であっても4096を超えてはなりません。ただし、マシンが64ビットの場合、Java 64ビットをインストールし、Java 64ビットインストールを指すJava_HOMEをmvn.batに提供します。
私は最近、Bambooでコンテナー化されたjarアプリケーションをビルドしているときにこのエラーに固執しました。
org.Apache.maven.surefire.booter.SurefireBooterForkException:フォークされたVMは適切にさよならを言わずに終了しました
何時間も研究した後、私はそれを修正しました。そして、ここで私のソリューションを共有することが役立つと思いました。
そのため、竹は、DockerコンテナのJavaアプリケーションに対してmvn clean package
コマンドを実行するたびに発生します。私はMavenの専門家ではありませんが、maven依存関係としてspring-bootに含まれているSurefireおよびJunit4プラグインに問題がありました。
修正するには、Junit4をJunit5に置き換え、pom.xml
のSurefireプラグインをオーバーライドする必要があります。
1.スプリングブート依存関係の挿入の除外:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!-- FIX BAMBOO DEPLOY>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
<!---->
</dependency>
2.新しいJunit5依存関係を追加します。
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.0</version>
<scope>test</scope>
</dependency>
3.プラグインセクション内に新しいプラグインを挿入する
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</plugin>
竹のビルドを修復するにはこれで十分です。また、すべてのJunit4テストを変換してJunit5をサポートすることを忘れないでください。
Pom.xmlでこれを設定するとうまくいきました。ただし、他の回避策についてはドキュメントを確認してください https://maven.Apache.org/surefire/maven-surefire-plugin/examples/class-loading.html
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!--these strange settings fixes a chrash and dumpstream from surefire when run from command line
Caused by: Java.lang.ClassNotFoundException: org.Apache.maven.surefire.booter.ForkedBooter
-->
<useSystemClassLoader>true</useSystemClassLoader>
<useManifestOnlyJar>false</useManifestOnlyJar>
</configuration>
</plugin>
提供された回答のどれもが問題を解決しなかった場合に会った。それはたまたまlog4jとSLF4J/logbackを使用しているレガシーアプリケーションでした。
以前の状況:clean test
ビルドは、Eclipse内から起動すると正常に実行されていましたが、コマンドラインで起動すると、このエラーが発生しました。 CircleCIのCIビルドも正常に実行されました。
私がしたこと:純粋な推測から、適切なlogback-test.xml
を設定し、ロギングの詳細度をダイヤルダウンします。驚いたことに、このエラーは発生しなくなり、コマンドラインからプロジェクト(およびこのエラーが発生したモジュール)をビルドできるようになりました。
私のポイントは、ロギングフレームワークの使用または設定方法は別の説明かもしれませんです。
それは本当にlog4jとlogbackの競合ですか?それとも、テストによって生成された大量のロギングが何らかの形でコマンドラインバッファをオーバーフローさせただけなのでしょうか?知りません。私には謎のままです。
Maven surefire 2.21.0を使用して、reuseForks
オプションの値をtrueからfalseに変更する問題を解決しました。
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<reuseForks>false</reuseForks>
</configuration>
</plugin>
</plugins>
</build>
ビルド中の私の設定セクション全体は次のようになりました。
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<skip>false</skip>
<reuseForks>false</reuseForks>
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
<argLine>-Dfile.encoding=UTF-8</argLine>
<useSystemClassLoader>false</useSystemClassLoader>
<includes>
<!--Test* classes for the app testing -->
<include>**/directory/Test*.Java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
提供されたすべてのソリューション(フォーク、システムローダー、メモリの増設など)を試しましたが、何も機能しませんでした。
Environment:gitlab ci環境でビルドが失敗し、Dockerコンテナ内でビルドが実行されました。
Solution:バージョン2.20.1でsurefirepluginを使用し、2.21.0以降(2.22.1を使用)にアップグレードすると問題が修正されました。
原因: SUREFIRE-1422 -surefireはコマンドps
を使用しますが、これはdocker環境では使用できず、「クラッシュ「。この問題は2.21.0以降で修正されています。
別の質問からのこの回答のおかげで: https://stackoverflow.com/a/50568662/2970422
Javaオプションを設定できます
SET Java_OPTS='-Xmx1024m' XX:+UseLoopPredicate
mvn clean install
同じ問題があり、OpenjdkのJava 10の代わりにOracleのJava 8を使用して解決しました。
UbuntuマシンでJenkinsをビルドしているときにこの問題に遭遇しました。
/var/log/syslog
がOut of memory: Kill process 19557 (Java) score 207 or sacrifice child
を報告しました。
したがって、Ubuntuマシンにより多くのスワップスペースを与えました 。それ以来、問題はなくなりました。
このエラーが発生したとき、開いているファイル(ulimit -n
)のulimitが低すぎることが原因でした。 (なんとかして)256に設定されていました:
% ulimit -n
256
制限を増やした後、エラーはなくなりました。
% ulimit -n 3072
% ulimit -n
3072
ご使用のシステムでは、制限をそれほど高く設定できない場合があります。たとえば、これは、より大きな数を使用しようとすると発生します:
% ulimit -n 3073
ulimit: setrlimit failed: invalid argument
または、これは既存の制限より低く、別の根本原因に直面している可能性があります。
私の場合、問題はワークスペースパスに関連しており、それは非常に長いものでした。そこで、パスのリファクタリングを行い、これで問題が解決しました。
私もこれを経験しました-しかし、私の場合は、キュウリ用のカスタムフックを書いていました
public class MappingFormatter implements gherkin.formatter.Formatter {
...
私のメソッドの1つはNullポインター例外を生成していました。これにより、エラーをログに記録せずに確実に終了しました。
テストクラスの静的メンバー変数がメソッド(クラス全体のテストケースで使用)を作成するメソッドを呼び出した後、このエラーが発生し、メソッドが例外を発生させました。
// Object created inside test class by calling a static getter.
// Exception thrown in getter:
private static Object someObject = SomeObject.getObject(...);
// ... <Object later used in class>
いくつかの修正には、各テストケース内でオブジェクトを再作成し、それに応じて例外をキャッチすることが含まれます。または、@ BeforeTestメソッド内でオブジェクトを初期化し、適切にビルドされるようにします。
これは、まったく異なる問題が原因で発生する可能性もあります。たとえば、私の場合、Jenkinsビルドは理由なくテストを実行中に断続的に失敗していました。
System.exit()
の発生を見つけるためにテストをふるいましたが、何もありませんでした。
さらに掘り下げた後、JDKのバグが原因でこのリグレッションが発生している可能性があることがわかりました。
私はまだビルドでこの修正を行っていますが、戻ってスレッドを再度更新します。
この問題に対する私の解決策は、Closeコンピューターのメモリを詰まらせていたchromeブラウザーでした。
私の場合、それはSystem.exit(0)を呼び出すコードでした。
これは、TEのドキュメントからの抜粋です。
Surefireは、いつでもSystem.exit()を呼び出すテストまたは参照ライブラリをサポートしません。その場合、Surefireとの互換性がなく、おそらくライブラリ/ベンダーに問題を報告する必要があります。
これは間違いなく機能します。
POMファイルに以下の行を追加して、ビルドします。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<trimStackTrace>false</trimStackTrace>
<includes>
<include>**/*Test.class</include>
</includes>
</configuration>
</plugin>
Windows(OpenJDK11、Maven 3.6.0、SUREFIRE 3.0.0-M1)では、根本的な原因がわかりました:
# Created at 2018-11-14T14:28:15.629
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c7500000, 522190848, 0) failed; error='The paging file is too small for this operation to complete' (DOS error/errno=1455)
this のように、ページングファイルのサイズを増やすことで解決しました。
最近travisはテストの実行を殺しました(関連するものは何も変更せずに(そして開発者のマシンで成功したビルド!))、したがってBUILD FAILURE。原因の1つはこれでした(@agudianの回答を参照)。
Surefireは、System.exit()を呼び出すテストまたは参照ライブラリをサポートしていません
(テストクラスが実際にSystem.exit(-1)
と呼ばれるため)。
代わりに、単純なreturn
ステートメントを使用すると役立ちます。
トラビスを再び幸せにするために、@ xiaohuoが提供する確実なパラメータ(<argLine>
)も追加する必要がありました。 (また、デスクトップの1つでビルドできるようにするには-XX:MaxPermSize=256m
を削除する必要がありました)
oneの2つだけを実行しても機能しませんでした。
より多くの背景については、 JavaでSystem.exitを呼び出す必要がある場合 を参照してください。
私の場合、pomに依存関係を追加するのを忘れていました。
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
正しいバージョンを選択してください(今日は1.8.9が最新です)
上記のすべてを試しても、うまくいきませんでした。以下の解決策が私のために働く:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
テストで使用されたフォークされたJVMのメモリが不足しています。解決策は、JVMのフォークを無効にし、メインJVMでテストを実行して十分なメモリがあることを確認するか、引数を渡してフォークされたJVMのメモリを増やすことです。
このソリューションをご覧ください answer
ポート5005でのSeleniumテストコードのリモートデバッグ中に、MacOSでもこの問題に遭遇しました。 Eclipse IDE端子へのログ出力には、アドレスはすでに使用されていますという根本的な問題が表示されませんでした。ログメッセージは、Eclipseが実際に実行しようとしていたMacOSターミナルで同じコマンドを実行したときにのみ表示されました。
/bin/sh -c cd /path/to/your/project/directory && /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/bin/Java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -jar /path/to/target/surefire/surefirebooter230340673926465933.jar /path/to/target/surefire 2019-06-28T10-50-02_140-jvmRun1 surefire6455775580414993159tmp surefire_02461993428448591420tmp
不正なJVMインスタンスを削除(アクティビティモニターでJavaプロセス名を検索)することで問題が修正されました。ちなみに、openjdk 8(v1.8.0_212)で問題のないsurefireプラグインバージョン2.21.0を実行しています。すべてのパスはビルド環境に固有であり、場合によってはポート(アドレス= 5005)であることに注意してください。
Java = 1.8を実行しているWindows 10環境で1.7に設定されたMavenプロジェクトをコンパイルしようとしたときと同じ問題が発生しました。
以下に示すようにJavaバージョンを1.7から1.8に変更することで解決しました。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
これは、メモリ不足が原因で発生する場合があります。 mvnの実行中に、バックグラウンドで実行されているアプリケーションがないことを確認してください。私の場合、Firefoxはメモリ使用量の多いバックグラウンドで実行されていました。