原始 Axon 应用程序作为 Fat JAR 运行不会自动配置 Axon Beans

Zon*_*Zon 4 gradle axon spring-boot fatjar

问题:

研究:在https://gitlab.com/ZonZonZon/simple-axon.git上,我编写了一个简单的Axon 应用程序,以表明使用Gradle 插件构建的JAR 工件在(运行时)不会自动配置 Axon beans罐)。虽然它在 Intellij 下运行良好。 com.github.johnrengelman.shadow

从终端中的项目根目录:

run gradle clean build shadowJar;
java -jar build/simpleaxon.jar;
Run Code Online (Sandbox Code Playgroud)

此处附有堆栈跟踪。我希望 Axon Autoconfiguration 默认提供 CommandBus、Snapshotter 等 Bean。

问题:如何在 fat jar 中自动配置默认的 axon beans?

Ste*_*ven 5

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

我运行了你的示例项目,确实得到了相同的结果;从来没有连接过轴突豆。这促使我一步步研究创建 fat 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"))
}
Run Code Online (Sandbox Code Playgroud)

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