-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Describe the bug
We're running into a class-loader issue in Quarkus 3.22.2 (worked fine w/ 3.19.3). Seems to be related to but doesn't look like the same as in #47692.
The issue happens for test classes that extend another class, something like this:
@QuarkusTest
@TestProfile(QuarkusTestProfilePersistInmemory.class)
class TestBasicOperations extends AbstractTestBasicOperations {
...
@ExtendWith(QuarkusNessieClientResolver.class)
abstract class AbstractTestBasicOperations {
TestBasicOperations + AbstractTestBasicOperations
Reproducible via ./gradlew :nessie-quarkus:test --tests TestBasicOperations --info
against this branch
(leads to java.lang.IllegalAccessError: class org.projectnessie.server.TestBasicOperations cannot access its abstract superclass ...AbstractTestBasicOperations (...TestBasicOperations is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @9dbb1d9; org.projectnessie.server.AbstractTestBasicOperations is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @e4e1ef5
)
If that test class doesn't have a superclass, it works fine. It happens for quite a bunch of tests.
It's also unrelated to our special ThreadPerTestClassExecutionExecutorService - same issue with the "vanilla JUnit engine/executor".
java.lang.ExceptionInInitializerError
java.lang.RuntimeException: java.lang.ExceptionInInitializerError
at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:693)
at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:791)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at org.projectnessie.junit.engine.ThreadPerTestClassExecutionExecutorService.executeTask(ThreadPerTestClassExecutionExecutorService.java:109)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at org.projectnessie.junit.engine.ThreadPerTestClassExecutionExecutorService.invokeAll(ThreadPerTestClassExecutionExecutorService.java:75)
at org.projectnessie.junit.engine.ThreadPerTestClassExecutionExecutorService.lambda$executeTask$0(ThreadPerTestClassExecutionExecutorService.java:88)
at java.base/java.lang.Thread.run(Thread.java:1575)
Caused by: java.lang.ExceptionInInitializerError
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:578)
at java.base/java.lang.Class.forName(Class.java:557)
at io.quarkus.runner.bootstrap.StartupActionImpl.run(StartupActionImpl.java:294)
at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:232)
at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:660)
at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:712)
... 2 more
Caused by: java.lang.RuntimeException: Failed to start quarkus
at io.quarkus.runner.ApplicationImpl.<clinit>(Unknown Source)
... 9 more
Caused by: java.lang.IllegalAccessError: class org.projectnessie.server.TestBasicOperations cannot access its abstract superclass org.projectnessie.server.AbstractTestBasicOperations (org.projectnessie.server.TestBasicOperations is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @9dbb1d9; org.projectnessie.server.AbstractTestBasicOperations is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @e4e1ef5)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1026)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:565)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:523)
at org.projectnessie.server.TestBasicOperations_Bean.<init>(Unknown Source)
at io.quarkus.arc.setup.Default_ComponentsProvider.addBeans9(Unknown Source)
at io.quarkus.arc.setup.Default_ComponentsProvider.getComponents(Unknown Source)
at io.quarkus.arc.impl.ArcContainerImpl.<init>(ArcContainerImpl.java:129)
at io.quarkus.arc.Arc.initialize(Arc.java:38)
at io.quarkus.arc.runtime.ArcRecorder.initContainer(ArcRecorder.java:52)
at io.quarkus.runner.recorded.ArcProcessor$initializeContainer1770303700.deploy_0(Unknown Source)
at io.quarkus.runner.recorded.ArcProcessor$initializeContainer1770303700.deploy(Unknown Source)
... 10 more
Also seeing another variant that's also related to class-loading for the Renovate-PR for Apache Polaris CI run
We suspect it's related to the test classloading rewrite.
Expected behavior
No response
Actual behavior
No response
How to Reproduce?
No response
Output of uname -a
or ver
No response
Output of java -version
No response
Quarkus version or git rev
No response
Build tool (ie. output of mvnw --version
or gradlew --version
)
No response
Additional information
No response
Metadata
Metadata
Assignees
Labels
Type
Projects
Status