gpt4 book ai didi

java - 如何将自定义类与 Spring Boot 加载器一起打包?

转载 作者:行者123 更新时间:2023-12-04 13:45:50 26 4
gpt4 key购买 nike

我正在使用 spring boot maven 插件为我创建一个带有依赖项的 jar。问题是,我需要作为 Windows 服务启动,而 WinSW 需要一个启动类。事情是所有的依赖都隐藏在 BOOT-INF/lib 中和 BOOT-INF/classes 中的类.

my-boot.jar
\
\BOOT-INF
\BOOT-INF\lib (jar dependencies)
\BOOT-INF\classes (compiled output)
\org\springframework... (Spring boot loader)
\com\mejmo\ServiceHelper.class <- here should be my class

我需要某种方式在类路径级别添加我的类(在 jar 的根目录中,以及 org.springframework.loader.* 是 Spring Boot 应用程序的启动序列 + 类加载器)。该服务不能直接调用 spring 引导加载程序,但在我处理启动/停止命令的类的帮助下。
我正在使用 https://github.com/snicoll-scratches/spring-boot-daemon但它将所有依赖项复制到 lib/以便 Windows 服务可以加载包含自定义类的 jar。问题是当所有依赖项都在 jar 中时。

有什么办法可以在jar中的启动序列级别打包我的自定义类?我想只用 maven 来做,没有任何手动复制,构建应该在 CI 中自动创建。

spring boot maven插件中的自定义布局参数有帮助吗?

更新:我发现我需要 org.springframework.boot.*也适用于我的 ServiceHelper 类(class)!所以这让它变得更加复杂:(

最佳答案

Gradle

将资源添加到 JAR 是由 Spring Boot Gradle Plugin 直接提供的:

bootJar {
with copySpec {
from "$buildDir/classes/java/main/com/mejmo/ServiceHelper.class"
into 'com/mejmo'
}
}

马文

Spring Boot Maven Plugin 不直接支持这个特性。但是 Ant 的 Zip Task可用于更新 JAR:

这是一个提取项目依赖项并将其添加到 JAR 根目录的示例。然而,每 zipfileset如文档中所述,可以使用:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>addExtractedJarOnRootLevel</id>
<phase>package</phase>
<configuration>
<target>
<zip destfile="${project.build.directory}/${project.artifactId}-${project.version}.jar"
update="yes" compress="false">
<zipfileset src="${GROUP_ID:ARTIFACT_ID:jar}" />
</zip>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>

笔记

Spring Boot Maven 插件绑定(bind)到Mavens package相也。因此, maven-antrun-plugin必须“低于” spring-boot-maven-plugin在 pom.xml 中。

如果 JAR 文件是可执行 JAR,则更新 JAR 文件不起作用: spring-boot-maven-plugin必须配置为 <executable>false</executable> ,所以没有 embeddedLaunchScript添加在 JAR 前面。

关于java - 如何将自定义类与 Spring Boot 加载器一起打包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com