web-dev-qa-db-ja.com

java.lang.NoClassDefFoundError:Mavenでjunit5テストを実行しようとすると、org / junit / platform / commons / PreconditionViolationException

コマンドmvn testを使用してテストを実行しようとすると、エラーが表示されます:

[ERROR] There was an error in the forked process
[ERROR] Java.lang.NoClassDefFoundError: org/junit/platform/commons/PreconditionViolationException
[ERROR] org.Apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
[ERROR] Java.lang.NoClassDefFoundError: org/junit/platform/commons/PreconditionViolationException
[ERROR]         at org.Apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.Java:656)
[ERROR]         at org.Apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.Java:282)
[ERROR]         at org.Apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.Java:245)
[ERROR]         at org.Apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.Java:1183)
[ERROR]         at org.Apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.Java:1011)
[ERROR]         at org.Apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.Java:857)
[ERROR]         at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:137)
[ERROR]         at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:210)
[ERROR]         at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:156)
[ERROR]         at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:148)
[ERROR]         at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:117)
[ERROR]         at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:81)
[ERROR]         at org.Apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.Java:56)
[ERROR]         at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:128)
[ERROR]         at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:305)
[ERROR]         at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:192)
[ERROR]         at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:105)
[ERROR]         at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:956)
[ERROR]         at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:288)
[ERROR]         at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:192)
[ERROR]         at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]         at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
[ERROR]         at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
[ERROR]         at Java.base/Java.lang.reflect.Method.invoke(Method.Java:566)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:282)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:225)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:406)
[ERROR]         at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:347)

Maven 3.6.1とバージョン2.22.1のsurefireプラグインを使用して、IntelliJ 2008.1で実行します。

私はpomに次の依存関係があります:

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.5.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.5.0</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.5.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.5.0</version>
    <scope>test</scope>
</dependency>

...

<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
    </plugin>
</plugins>

最近、テストケースを実行できませんでしたが、構成を試行した後、このエラーが表示されます。

17
kris82pl

削除する junit-platform-launcherjunit-jupiter-engineおよびjunit-jupiter-api

追加 junit-jupiter。 (junit-jupiterはアグリゲーターです)

出典:

14

次の依存関係を追加すると、私の場合に役立ちます

 <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-commons</artifactId>
            <version>1.5.2</version>
 </dependency>
11

他の人が示唆したように、JUnit 5.5.2バージョンを使用することがここに行く方法です。これを達成するためのさまざまな選択肢があります。

  1. spring-boot-starter-parentを使用している場合は、2.2.0.RELEASEにアップグレードできます
  2. spring-boot-starter-parent(またはspring-boot-dependencies)を使用する場合、JUnitだけを更新するプロパティを定義できます:<junit-jupiter.version>5.5.2</junit-jupiter.version>
  3. Eclipseだけでこの問題が発生している場合は、それを更新して、JUnit 5ライブラリをJavaビルドパスに追加できます(Project> Java Build Path> Libraries >ライブラリの追加> JUnit> JUnit 5>終了
  4. 5.5.2バージョンを使用して、Junit BOMを追加できます(Prasanth RajendranまたはRamit回答を参照)
11
Gerardo Roza

以下はsurefire.plugin.version 2.22.2を使用して私のために働きました

junit-jupiterアーティファクトは、他のすべての必要なアーティファクトをもたらします。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.junit</groupId>
      <artifactId>junit-bom</artifactId>
      <version>5.5.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
<dependencies>
  <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
  </dependency>
  <!--Optional: Supports running Junit4 along with Junit5 -->
  <dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>
6
Ramit

_Gradle build_でも同じ問題が発生し、JUnit Bill of Materials(BOM)を使用して問題を解決しました。これにより、Junitの直接および推移的な依存関係バージョンが処理されます。

_dependencyManagement {
    imports {
        mavenBom "org.junit:junit-bom:5.5.2"
    }
}
dependencies {
...
    testCompile('org.junit.jupiter:junit-jupiter-api')
    testRuntime('org.junit.jupiter:junit-jupiter-engine')
    testCompile('org.junit.jupiter:junit-jupiter-params')
    testCompile('org.junit.platform:junit-platform-launcher')
    testCompile('org.junit.platform:junit-platform-runner')
}
_

[〜#〜] note [〜#〜]:Junit BOMがJunit依存関係のバージョン管理ロールを処理するため、バージョンを指定していません。

6

Java.lang.NoClassDefFoundError:Mavenでjunit5テストを実行しようとすると、org/junit/platform/commons/PreconditionViolationException

このエラーは、junit-plateform-engine junit-jupiter-paramsとjunit-platform-runnerのバージョンの不一致、およびその他のそれぞれの依存関係が原因で発生する可能性があります。

したがって、この問題を解決するために、1.5.3などのバージョンを定義する必要はありません... etc

次のようにバージョンを定義できます。

<dependencies>
<!--need to add for parameterized test -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        **<version>${junit.jupiter.version}</version>**
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        **<version>${junit.jupiter.version}</version>**
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-runner</artifactId>
        **<version>${junit.platform.version}</version>**
        <scope>test</scope>
    </dependency>
</dependencies>

したがって、この互換バージョンを通じて、jarがプロジェクトに追加され、プロジェクトは正常に実行されます

0
SumitTyagi

私の場合、問題はローカルのMavenリポジトリーの削除の後に消えました。どのライブラリがこの奇妙な動作を引き起こしたかはわかりませんが、すべて正常に動作しています。

0
tangens

私はpom.xmlの以下の部分にコメントしました:

  <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>

Javaビルドパス(プロジェクト(右クリック-> Javaビルドパス->ライブラリ-> junit-> junit5))にjunit5を追加しました。

0
Boney