quarkus: Intermittent build error `ClassPathElement.getResource(String) is null`

Describe the bug

I am intermittently receiving a build error during @QuarkusTest runs in Gradle.

Noticeably they don’t appear to be random but intermittent with certain tests; although I’m not sure exactly what that means. Considering the stack trace I can’t imagine this is related to our code.

The issue is similar/same as #14611 but that issue is targeting a much older version and was marked invalid.

Here is the complete logged exception:

  java.lang.RuntimeException: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: java.lang.NullPointerException: Cannot invoke "io.quarkus.bootstrap.classloading.ClassPathResource.getUrl()" because the return value of "io.quarkus.bootstrap.classloading.ClassPathElement.getResource(String)" is null
        at io.quarkus.bootstrap.classloading.QuarkusClassLoader.getResource(QuarkusClassLoader.java:354)
        at io.quarkus.test.common.PathTestHelper.isTestClass(PathTestHelper.java:257)
        at io.quarkus.test.junit.QuarkusTestExtension$TestBuildChainFunction$1$1$1.test(QuarkusTestExtension.java:1374)
        at io.quarkus.test.junit.QuarkusTestExtension$TestBuildChainFunction$1$1$1.test(QuarkusTestExtension.java:1371)
        at io.quarkus.arc.deployment.ArcProcessor$6.test(ArcProcessor.java:350)
        at io.quarkus.arc.deployment.ArcProcessor$6.test(ArcProcessor.java:347)
        at io.quarkus.arc.processor.UnusedBeans.findRemovableBeans(UnusedBeans.java:54)
        at io.quarkus.arc.processor.BeanDeployment.removeUnusedBeans(BeanDeployment.java:434)
        at io.quarkus.arc.processor.BeanDeployment.removeUnusedComponents(BeanDeployment.java:349)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:295)
        at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:140)
        at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:517)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
        at java.base/java.lang.Thread.run(Thread.java:833)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)

  Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: java.lang.NullPointerException: Cannot invoke "io.quarkus.bootstrap.classloading.ClassPathResource.getUrl()" because the return value of "io.quarkus.bootstrap.classloading.ClassPathElement.getResource(String)" is null
        at io.quarkus.bootstrap.classloading.QuarkusClassLoader.getResource(QuarkusClassLoader.java:354)
        at io.quarkus.test.common.PathTestHelper.isTestClass(PathTestHelper.java:257)
        at io.quarkus.test.junit.QuarkusTestExtension$TestBuildChainFunction$1$1$1.test(QuarkusTestExtension.java:1374)
        at io.quarkus.test.junit.QuarkusTestExtension$TestBuildChainFunction$1$1$1.test(QuarkusTestExtension.java:1371)
        at io.quarkus.arc.deployment.ArcProcessor$6.test(ArcProcessor.java:350)
        at io.quarkus.arc.deployment.ArcProcessor$6.test(ArcProcessor.java:347)
        at io.quarkus.arc.processor.UnusedBeans.findRemovableBeans(UnusedBeans.java:54)
        at io.quarkus.arc.processor.BeanDeployment.removeUnusedBeans(BeanDeployment.java:434)
        at io.quarkus.arc.processor.BeanDeployment.removeUnusedComponents(BeanDeployment.java:349)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:295)
        at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:140)
        at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:517)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
        at java.base/java.lang.Thread.run(Thread.java:833)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)

  Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: java.lang.NullPointerException: Cannot invoke "io.quarkus.bootstrap.classloading.ClassPathResource.getUrl()" because the return value of "io.quarkus.bootstrap.classloading.ClassPathElement.getResource(String)" is null
        at io.quarkus.bootstrap.classloading.QuarkusClassLoader.getResource(QuarkusClassLoader.java:354)
        at io.quarkus.test.common.PathTestHelper.isTestClass(PathTestHelper.java:257)
        at io.quarkus.test.junit.QuarkusTestExtension$TestBuildChainFunction$1$1$1.test(QuarkusTestExtension.java:1374)
        at io.quarkus.test.junit.QuarkusTestExtension$TestBuildChainFunction$1$1$1.test(QuarkusTestExtension.java:1371)
        at io.quarkus.arc.deployment.ArcProcessor$6.test(ArcProcessor.java:350)
        at io.quarkus.arc.deployment.ArcProcessor$6.test(ArcProcessor.java:347)
        at io.quarkus.arc.processor.UnusedBeans.findRemovableBeans(UnusedBeans.java:54)
        at io.quarkus.arc.processor.BeanDeployment.removeUnusedBeans(BeanDeployment.java:434)
        at io.quarkus.arc.processor.BeanDeployment.removeUnusedComponents(BeanDeployment.java:349)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:295)
        at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:140)
        at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:517)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
        at java.base/java.lang.Thread.run(Thread.java:833)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)

  Caused by: java.lang.NullPointerException: Cannot invoke "io.quarkus.bootstrap.classloading.ClassPathResource.getUrl()" because the return value of "io.quarkus.bootstrap.classloading.ClassPathElement.getResource(String)" is null

Expected behavior

Build completes without intermittent errors.

Actual behavior

See above

How to Reproduce?

I cannot reproduce this in a “small” project. We have a 10 module Gradle project that I am seeing the issue in. While intermittent I would say it happens 60% of the time at this point.

Output of uname -a or ver

macOS 12.6

Output of java -version

OpenJDK 17.0.1

GraalVM version (if different from Java)

No response

Quarkus version or git rev

2.13.0.Final

Build tool (ie. output of mvnw --version or gradlew --version)

Gradle 7.5.1

Additional information

No response

About this issue

  • Original URL
  • State: open
  • Created 2 years ago
  • Comments: 19 (16 by maintainers)

Most upvoted comments

Actually, I guess I can check pick your changes back onto 2.13.0.Final branch and test it that way.