SpringBoot 从 IntelliJ 运行,但从 JAR 抛出 java.lang.NoSuchMethodError
SpringBoot works from IntelliJ but throws java.lang.NoSuchMethodError from JAR
我正在构建一个通过 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 压缩到独立的 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'd,所以我不确定为什么它找不到方法?
在使用 spring 引导时,您不必像那样创建一个 fat jar。
您可以将 spring-boot-gradle-plugin
dependency 添加到您的 build.gradle。
然后,简单地 运行 构建 gradle 将在 target
文件夹中生成一个 spring 引导 jar 文件,该文件将具有所有必需的依赖项并且可以是 运行 与 java -jar
.
更多信息在这里:https://spring.io/guides/gs/spring-boot/#_jar_support_and_groovy_support
我正在构建一个通过 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 压缩到独立的 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'd,所以我不确定为什么它找不到方法?
在使用 spring 引导时,您不必像那样创建一个 fat jar。
您可以将 spring-boot-gradle-plugin
dependency 添加到您的 build.gradle。
然后,简单地 运行 构建 gradle 将在 target
文件夹中生成一个 spring 引导 jar 文件,该文件将具有所有必需的依赖项并且可以是 运行 与 java -jar
.
更多信息在这里:https://spring.io/guides/gs/spring-boot/#_jar_support_and_groovy_support