3

问题:

研究:在https://gitlab.com/ZonZonZon/simple-axon.git我制作了一个简单的Axon-app以显示使用Gradle-plugin构建的JAR-artifact不会自动配置 Axon beans(当运行为罐)。虽然它在 Intellij 下运行良好。 com.github.johnrengelman.shadow

从终端的项目根目录:

run gradle clean build shadowJar;
java -jar build/simpleaxon.jar;

Stacktrace 附在此处。我希望 Axon Autoconfiguration 默认提供 CommandBus、Snapshotter 等 bean。

问题:如何在胖罐中自动配置默认轴突豆?

4

2 回答 2

3

因此,我进行了一些调查以预知出了什么问题,但我知道问题出在哪里。请注意,这不是 Axon 特定的东西,而是您正在使用的插件。

我运行了您的示例项目,确实得到了相同的结果;从来没有连接过轴突豆。这使我逐步研究了创建胖 JAR 的过程。首先是 Maven,然后是带有 Maven 的 Spring Boot,然后是带有 Spring Boot 的 Gradle,最后是您所指的 Shadow 插件。

这一努力让我想到了这个问题,它指出“需要使用 META-INF 文件的项目需要将其添加影子插件中,并且应该记录在案”。

通过引用的部分如下:

import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer

// Left out all other specifics from your 'build.gradle' file

shadowJar {
    // Required for Spring
    mergeServiceFiles()
    append 'META-INF/spring.handlers'
    append 'META-INF/spring.schemas'
    append 'META-INF/spring.tooling'
    transform(PropertiesFileTransformer) {
        paths = ['META-INF/spring.factories' ]
        mergeStrategy = "append"
    }

    setArchiveFileName("simpleaxon.jar")
    getDestinationDirectory().set(new File(projectDir, "./build"))
}

将那段逻辑添加到您的 build.gradle文件后,我可以按预期运行您的示例项目。

于 2020-04-21T11:53:09.413 回答
0

在多模块 Gradle 项目中使用 Axon 时,我遇到了类似的问题。该应用程序在打包并在 IDE 中正常工作时将无法工作。我得到的确切错误是

org.axonframework.messaging.annotation.UnsupportedHandlerException: Unable to resolve parameter 0 in handler

这样做的原因是因为@Steven 暗示的插件中的资源没有被正确解析,所以ParameterResolverFactories没有加载。META-INF/servicesshadow jar

我已经设法简单地修复它(在 Gradle 中使用 Kotlin DSL):

tasks.shadowJar {
  mergeServiceFiles()
}
于 2020-05-11T11:10:42.917 回答