Reputation: 1119
When trying to run tests using command mvn test I receive an error:
[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)
I run it under IntelliJ 2008.1, using maven 3.6.1 and surefire plugin in version 2.22.1
I have following dependencies in 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>
Recently I wasn't able to run any test cases but now after some configuration tries I receive this error.
Upvotes: 54
Views: 117737
Reputation: 1879
Older versions of JUnit Jupiter and/or Surefire did not integrate well. Use the latest if you can — combined with using simple configuration of minimal and consistent dependencies/plugins, it should eliminate this error entirely.
For example, this POM excerpt works well:
<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.10.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<!-- can add junit-jupiter-params, etc. -->
<!-- don't depend on the engine; Surefire manages it -->
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.0</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.0</version>
</plugin>
</plugins>
</build>
</project>
Upvotes: 0
Reputation: 1
I use gradle, Finally making below changes worked for me
Changed to ->
dependencies {
testImplementation 'org.mockito:mockito-junit-jupiter:3.11.1'
testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
}
from->
dependencies {
testCompile 'org.mockito:mockito-junit-jupiter:3.3.3'
testCompile 'org.junit.jupiter:junit-jupiter:5.4.2'
}
Upvotes: 0
Reputation: 790
Try upgrade the Junit to 5.8.2
or greater, see Jupter Junit versions availables here:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
The junit-platform-commons
is transactive dependency from Junit, so if you upgrade Junit these transactive dependencies will also be updated.
Upvotes: 1
Reputation: 3679
Few days ago I faced the similar issue. I tried all solutions suggested here, but none of them worked. In my case the error occurred because classpath ended up having two different versions of JUnit. I had spring-boot-test
dependency wich uses JUnit 5.3.2
. But then, I added JUnit 5.7.1
. Therefore, my project was compiled with a newer version of JUnit (5.7.1)
but found an older version (5.3.2)
at runtime. As a result, the JUnit
launcher tried to use a class that is not available in the older version of JUnit
.In my case solution was to override the JUnit
version managed by Spring like this:
<properties>
<junit-jupiter.version>5.7.1</junit-jupiter.version>
</properties>
Hope somebody find this helpful.
Upvotes: 4
Reputation: 4942
You can get the error like "java.lang.NoClassDefFoundError: org/junit/platform/commons/util/Preconditions" in case of tring to included some test class (from junit/assertj) in your production code.
Above is a consequence of
src/main/java
(for example you used import like import org.assertj.core.util.Lists
in your production code from src/main/java
.requires org.assertj.core
)NOTE: This offending dependency could be inside your module or any module included in dependencies.
For example your module has following dependency:
<dependency>
<groupId>com.acme</groupId>
<artifactId>your-another-module</artifactId>
</dependency>
and your another module includes spring-boot-starter-test in scope compile like:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>compile</scope> <!-- **or even scope is omitted and by default it is compile !** -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
As mentioned inside above code snippet, the scope might have even been omitted which would default to "compile".
Now following on that error you might have a production class YourClass residing in your module and accidentally import some test code from test libraries like:
// here we have accidential import of Lists from assertj
import org.assertj.core.util.Lists;
class YourClass {
}
The solution is to:
Upvotes: 1
Reputation: 23
In case it helps anyone: I was getting similar error along with "No tests found with test runner JUnit 5" when running JUnit 5 tests in Eclipse (gradle-based). Upgrading to JUnit 5.6.0 helped as per https://github.com/eclipse/buildship/issues/980
Upvotes: 0
Reputation: 1
java.lang.NoClassDefFoundError: org/junit/platform/commons/PreconditionViolationException when trying run junit5 test with maven
This error can be come due to the version mismatch of junit-plateform-engine junit-jupiter-params and junit-platform-runner and also other respective dependencies.
So for the resolution of this issue you do not need to define version like 1.5.3 ...etc
you can define version as follows :
<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>
So through this compatible version jar will be added in your project and project will run successfully
Upvotes: 0
Reputation: 39753
In my case the problem disappeared after deleting my local maven repository. Don't know what library caused this strange behaviour, but now everything is working fine!
Upvotes: 1
Reputation: 1790
I have commented the below part in 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>
And I have added junit5 in java build path(project(right click->java build path->libraries->junit->junit5) It worked for me. Mine is spring-boot project.
Upvotes: 0
Reputation: 3394
As others suggested, using JUnit 5.5.2
version is the way to go here.
There are different alternatives to achieve this:
spring-boot-starter-parent
, you can upgrade it to 2.2.0.RELEASE
spring-boot-starter-parent
(or spring-boot-dependencies
), you can define a property to update just JUnit: <junit-jupiter.version>5.5.2</junit-jupiter.version>
Upvotes: 23
Reputation: 181
The following worked for me using surefire.plugin.version 2.22.2
junit-jupiter artifact brings in all other necessary artifacts.
<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>
Upvotes: 10
Reputation: 5532
I got the same problem with Gradle build
and I got my issue resolved using the JUnit Bill of Materials(BOM)
, which will take care of Junit's direct and transitive dependencies version.
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: I have not specified the version because the Junit BOM will take care of the Junit dependencies' version management role.
Upvotes: 11
Reputation: 403
adding following dependency helped in my case
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.5.2</version>
</dependency>
Upvotes: 29
Reputation: 1255
Remove junit-platform-launcher
, junit-jupiter-engine
and junit-jupiter-api
.
Add junit-jupiter
. (junit-jupiter
is aggregator)
Sources:
Upvotes: 62