IntelliJ IDEA repeatedly resolving junit-platform-launcher

Answered

I have a Gradle project with some JUnit 5 tests and the following dependencies:

repositories {
mavenCentral()
}

dependencies {
testCompile 'org.junit.jupiter:junit-jupiter-api:5.3.2'
testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.3.2'
}

Seemingly too often, that is to say every 5 minutes or so, when running a JUnit test, IntelliJ will resolve `junit-platform-launcher` again. This wastes around 30 seconds each time.

Why is IntelliJ re-resolving this dependency so often?

2
4 comments

There was one similar report that was caused by DNS/proxy misconfiguration. 

It happens when IDE is checking if the proxy is valid when java takes long to to resolve the poxy host name.

Adding *.maven.org,*.jboss.org to No proxy hosts seems to workarounds the problem. Also specifying the proxy by the host name can  help.

Another workaround is to add Gradle dependencies for test runtime:

testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.3.1' // needed even if JUnit 4 is not used but just referenced 
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.3.1' // JUnit 5 

 

1
Avatar
Permanently deleted user

If you're using Maven, add this to your pom.xml:

<!--Avoid "Resolving Maven dependencies / Loading org.junit.platform:junit-platform-launcher" slow speed when launching from IntelliJ -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.6.0</version>
</dependency>
2
Avatar
Permanently deleted user

Doing so results in 

Exception in thread "main" java.lang.NoClassDefFoundError: org/junit/platform/engine/EngineDiscoveryListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.getLauncherDiscoveryListener(LauncherDiscoveryRequestBuilder.java:241)
at org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.build(LauncherDiscoveryRequestBuilder.java:235)
at com.intellij.junit5.JUnit5TestRunnerUtil.buildRequest(JUnit5TestRunnerUtil.java:102)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:55)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.EngineDiscoveryListener
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 16 more

when launching tests via IDE Ctrl+Shift+F10, using IJ 2020.1.4

0

@..., this is another issue. Try adding testImplementation('org.junit.platform:junit-platform-launcher:1.5.2'). 

0

Please sign in to leave a comment.