java - Quarkus ClassNotFoundException 本地依赖

标签 java gradle quarkus

我正在尝试将项目迁移到 Quarkus。该项目依赖于本地 .jar 文件。使用 Quarkus 运行应用程序结果为 java.lang.NoClassDefFoundError/java.lang.ClassNotFoundException对于驻留在所述 jar 中的类。

我使用 gradle 作为构建工具,并使用以下方法将本地 jar 文件添加为依赖项:

implementation fileTree(dir: 'libs', include: ['*.jar'])

假设库包含一些类 Foo使用静态方法init() ,那么以下代码将导致错误:

// From the local jar
import org.somepackage.Foo;

@Startup
@Singleton
public class Main {

  @PostConstruct
  public void initLocalLibrary() {
    Foo.init();
  }

}

确切的输出是

2020-04-19 18:31:21,266 ERROR [io.qua.application] (main) Failed to start application: java.lang.NoClassDefFoundError: org/somepackage/Foo
    at Main.initLocalLibrary(Main.java:)
    at Main.initLocalLibrary_Bean.create(Main_Bean.zig:129)
    at Main_Bean.create(Main_Bean.zig:183)
Caused by: java.lang.ClassNotFoundException: org.somepackage.Foo

    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 io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:322)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:275)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:322)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:275)
    ... 35 more

2020-04-19 18:31:21,302 ERROR [io.qua.dev.DevModeMain] (main) Failed to start Quarkus: java.lang.RuntimeException: Failed to start quarkus
    at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:232)
    at io.quarkus.runtime.Application.start(Application.java:90)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at io.quarkus.runner.bootstrap.StartupActionImpl.run(StartupActionImpl.java:99)
    at io.quarkus.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:60)
    at io.quarkus.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:236)
    at io.quarkus.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:39)
    at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:131)
    at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:84)
    at io.quarkus.dev.DevModeMain.start(DevModeMain.java:113)
    at io.quarkus.dev.DevModeMain.main(DevModeMain.java:54)

在没有 Quarkus 的情况下运行应用程序效果很好。

最佳答案

请尝试更换

实现 fileTree(dir: 'libs', include: ['*.jar'])

api fileTree(dir: 'libs', include: ['*.jar'])

关于java - Quarkus ClassNotFoundException 本地依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61308399/

相关文章:

java - Spring Data - 通过方法名称获取单列查询

java - Postgresql 中的批量更新

gradle - 从Git下载属性文件并在gradle中执行任何任务之前加载

java - 在 Quarkus 中异步保存数据

java - Selenium : How to retrieve WebDriver's implicitWait time in Java?

java - Android 应用程序在定义字节缓冲区来读取文件时崩溃

java - 为什么在我构建项目时 gradle 会删除依赖项

gradle - Gradle:如何将输出jar文件添加到现有war文件中

aws-lambda - Quarkus AWS Lambda 无效入口点错误 : fork/exec/var/task/bootstrap: exec format error Runtime. InvalidEntrypoint

quarkus - 未使用 Quarkus 调用 aroundInvoke