SpringBoot 从 IntelliJ 工作,但从 JAR 抛出 java.lang.NoSuchMethodErr



我正在构建一个通过RPC连接到CorDapp(Corda应用程序(的SpringBoot REST客户端。RPC 代理依赖于 ActiveMQ/Artemis。

我的 gradle.build 文件包含这些依赖项

compile "org.apache.activemq:artemis-commons:$active_mq_version"
compile "org.apache.activemq:artemis-core-client:$active_mq_version"

当我从IntelliJ运行应用程序时,一切正常。

该模块及其所有依赖项使用以下 gradle 任务将 Fat-JAR'd 到一个独立的 JAR 文件中

jar {
zip64 = true
from {
String[] include = [
"kotlin-runtime-${kotlin_version}.jar",
"kotlin-stdlib-${kotlin_version}.jar"
]
configurations.compile
.findAll { include.contains(it.name) }
.collect { it.isDirectory() ? it : zipTree(it) }
}
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'com.client.ApplicationKt'
)
}
}

当我尝试运行JAR文件时,出现以下异常:

java.lang.NoSuchMethodError: org.apache.activemq.artemis.api.core.client.ClientSession.createTemporaryQueue(Lorg/apache/activemq/artemis/api/core/SimpleString;Lorg/apache/activemq/artemis/api/core/RoutingType;Lorg/apache/activemq/artemis/api/core/SimpleString;(

当我检查JAR文件的内容时,似乎ActiveMQ/Artemis已被正确使用Fat-JAR,所以我不确定为什么它找不到该方法?

在使用弹簧靴时,您不必创建这样的胖罐子。 您可以将spring-boot-gradle-plugin依赖项包含在 build.gradle 中。

然后,只需运行 gradle 构建将在target文件夹中生成一个 spring boot jar 文件,该文件将具有所有必需的依赖项,并且可以使用java -jar运行。

更多信息在这里: https://spring.io/guides/gs/spring-boot/#_jar_support_and_groovy_support

相关内容

最新更新