Skip to content

TestEngines not found by ServiceLoader on Java 9 #805

Closed
@sormuras

Description

@sormuras

Overview

This issue was discovered in conjunction with tests on Java 9; however, the issue is likely applicable on Java 8 as well.

The following pseudo-code, when run inside a Java 9 JShell session...

println("ServiceLoader.load(TestEngine.class)");
println("  loader = " + Thread.currentThread().getContextClassLoader());
ServiceLoader.load(TestEngine.class).forEach(System.out::println);

println("ServiceLoader.load(TestEngine.class, getClass().getClassLoader())");
println("  loader = " + getClass().getClassLoader());
ServiceLoader.load(TestEngine.class, getClass().getClassLoader()).forEach(System.out::println);

println("ServiceLoader.load(TestEngine.class, TestEngine.class.getClassLoader())");
println("  loader = " + TestEngine.class.getClassLoader());
ServiceLoader.load(TestEngine.class, TestEngine.class.getClassLoader()).forEach(System.out::println);

yields the following :

ServiceLoader.load(TestEngine.class)
  loader = jdk.jshell.execution.DefaultLoaderDelegate$RemoteClassLoader@4b952a2d
-

ServiceLoader.load(TestEngine.class, getClass().getClassLoader())
  loader = jdk.internal.loader.Loader@42607a4f
* org.junit.jupiter.engine.JupiterTestEngine@fa36558
* org.junit.vintage.engine.VintageTestEngine@672872e1

ServiceLoader.load(TestEngine.class, TestEngine.class.getClassLoader())
  loader = jdk.internal.loader.Loader@42607a4f
* org.junit.jupiter.engine.JupiterTestEngine@484970b0
* org.junit.vintage.engine.VintageTestEngine@4470f8a6

The problem leads to org.junit.platform.commons.util.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath messages and was first encountered at forax/pro#23 (comment)

Work-around

Deliverables

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions