SpringBoot从IntelliJ运行,但从JAR抛出java.lang.NoSuchMethodError

时间:2018-06-21 18:06:18

标签: spring-boot intellij-idea kotlin corda activemq-artemis

我正在构建一个通过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了,所以我不确定为什么找不到该方法?

1 个答案:

答案 0 :(得分:1)

使用弹簧靴时,您不必创建类似的胖子。 您可以将spring-boot-gradle-plugin dependency包含在build.gradle中。

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

此处有更多信息:https://spring.io/guides/gs/spring-boot/#_jar_support_and_groovy_support