最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - Quarkus quarkusGenerateCode Fails When shadow Plugin is Applied in Root Gradle Project - Stack Overflow

programmeradmin2浏览0评论

Description:

I'm building a Quarkus project using Gradle, and during the quarkusGenerateCode task, I encounter the following error:

 ./gradlew clean build                                                                                                                                  ✔ 

> Task :quarkusGenerateCode
2025-02-16T15:12:40.186701Z /127.0.0.1:60733 to /127.0.0.1:60732 workers ERROR Unable to create Lookup for ctx java.lang.NoSuchMethodError: 'java.util.stream.Stream .apache.logging.log4j.util.ServiceLoaderUtil.loadServices(java.lang.Class, java.lang.invoke.MethodHandles$Lookup, boolean)'
        at .apache.logging.log4j.core.impl.ThreadContextDataInjector.getServiceProviders(ThreadContextDataInjector.java:77)
        at .apache.logging.log4j.core.impl.ThreadContextDataInjector.<clinit>(ThreadContextDataInjector.java:64)
        at .apache.logging.log4j.core.impl.ThreadContextDataInjector$ForDefaultThreadContextMap.<init>(ThreadContextDataInjector.java:93)
        at .apache.logging.log4j.core.impl.ContextDataInjectorFactory.createDefaultInjector(ContextDataInjectorFactory.java:91)
        at .apache.logging.log4j.core.impl.ContextDataInjectorFactory.createInjector(ContextDataInjectorFactory.java:71)
        at .apache.logging.log4j.core.lookup.ContextMapLookup.<init>(ContextMapLookup.java:34)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
        at .apache.logging.log4j.core.util.ReflectionUtil.instantiate(ReflectionUtil.java:189)
        at .apache.logging.log4j.core.lookup.Interpolator.<init>(Interpolator.java:86)
        at .apache.logging.log4j.core.lookup.Interpolator.<init>(Interpolator.java:105)
        at .apache.logging.log4j.core.config.AbstractConfiguration.<init>(AbstractConfiguration.java:135)
        at .apache.logging.log4j.core.config.NullConfiguration.<init>(NullConfiguration.java:32)
        at .apache.logging.log4j.core.LoggerContext.<clinit>(LoggerContext.java:74)
        at .apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:254)
        at .apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218)
        at .apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:140)
        at .apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:123)
        at .apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:230)
        at .apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
        at .apache.logging.log4j.LogManager.getContext(LogManager.java:118)
        at .apache.logging.log4j.LogManager.getLogger(LogManager.java:622)
        at .jboss.logging.Log4j2Logger.<init>(Log4j2Logger.java:36)
        at .jboss.logging.Log4j2LoggerProvider.getLogger(Log4j2LoggerProvider.java:36)
        at .jboss.logging.Log4j2LoggerProvider.getLogger(Log4j2LoggerProvider.java:32)
        at .jboss.logging.LoggerProviders.logProvider(LoggerProviders.java:160)
        at .jboss.logging.LoggerProviders.tryLog4j2(LoggerProviders.java:124)
        at .jboss.logging.LoggerProviders.findProvider(LoggerProviders.java:85)
        at .jboss.logging.LoggerProviders.find(LoggerProviders.java:32)
        at .jboss.logging.LoggerProviders.<clinit>(LoggerProviders.java:29)
        at .jboss.logging.Logger.getLogger(Logger.java:2467)
        at .jboss.logging.Logger.getLogger(Logger.java:2493)
        at io.quarkus.bootstrap.classloading.QuarkusClassLoader.<clinit>(QuarkusClassLoader.java:38)
        at io.quarkus.bootstrap.app.CuratedApplication.getOrCreateAugmentClassLoader(CuratedApplication.java:197)
        at io.quarkus.bootstrap.app.CuratedApplication.createDeploymentClassLoader(CuratedApplication.java:338)
        at io.quarkus.gradle.tasks.worker.CodeGenWorker.execute(CodeGenWorker.java:48)
        at .gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
        at .gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54)
        at .gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48)
        at .gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
        at .gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48)
        at .gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
        at .gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
        at .gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:109)
        at .gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:78)
        at .gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:159)
        at .gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
        at .gradle.process.internal.worker.request.WorkerAction.lambda$run$1(WorkerAction.java:156)
        at .gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:85)
        at .gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:148)
        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 .gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at .gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at .gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
        at .gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
        at .gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
        at .gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at .gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:842)


Project Structure

My root project contains both Spring Boot and Quarkus subprojects. The Spring Boot subproject requires the shadow plugin to generate a fat JAR for AWS Lambda deployment. However, when I declare the shadow plugin in the root build.gradle.kts, Quarkus fails to generate code locally.

Reproduction Steps

This issue occurs when I add shadow in the root build.gradle.kts:

Root build.gradle.kts

plugins {
    kotlin("jvm") version "2.0.21"
    id("com.github.johnrengelman.shadow") version "8.1.1" apply false
    id("io.quarkus") version "3.18.2"
}

repositories {
    mavenCentral()
    gradlePluginPortal()
}

dependencies {
}

group = "com.example"
version = "1.0.0-SNAPSHOT"

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

When apply false is added to the shadow plugin, the quarkusGenerateCode task fails. Removing this fixes the issue, but then my Spring Boot project cannot use the shadowJar build.

Question

How can I configure Gradle so that:

Spring Boot projects can still use the shadow plugin. Quarkus projects do not fail on quarkusGenerateCode. Root project remains the common configuration without causing conflicts between Quarkus and Spring Boot. Is there a way to apply shadow only in Spring Boot subprojects while keeping the root project clean and avoiding the quarkusGenerateCode issue? Any workaround to prevent Quarkus from breaking due to shadow in the root project?

Thanks.

发布评论

评论列表(0)

  1. 暂无评论