配置Maven以打包Fat jar,而无需像春季启动那样在vertx项目中解包依赖项

时间:2019-05-21 23:47:42

标签: java maven spring-boot jar vert.x

如何在构建胖jar时告诉maven包括依赖jar文件,而不是将它们解压缩为.class文件?

我有一个生产胖子的vertx 3.6.0项目。我正在使用vertx-maven-plugin:1.0.13,并运行mvn clean package进行构建。为了利用Veracode SCM(静态扫描),我的胖子jar中的依赖项必须完整无缺,这意味着原始的依赖项jar文件必须包含在我的胖子jar中。 Maven正在解压缩所有依赖项,所以我只拥有类文件。

我们还有另一个按预期运行的spring boot项目。看来春季最终启动repackage的目标是将所有依赖项jar文件放在jar文件内的BOOT-INF目录中。

使用vertx-maven-plugin进入最后2个目标:
maven-jar-plugin:2.4:jar
vertx-maven-plugin:1.0.13:package

使用spring-boot-maven-plugin进入最后2个目标:
maven-jar-plugin:2.4:jar
spring-boot-maven-plugin:2.1.2.RELEASE:repackage

到目前为止,我已经在文档中搜索了vertx-maven-plugin以及整个https://maven.apache.org和其他地方的文档,

对于非Spring Boot应用程序,是否有办法获得相同的重新打包行为?

2 个答案:

答案 0 :(得分:0)

您无法使用Vert.x做到这一点,因为它无法进行精美的类加载。

但是,由于它是可嵌入的,因此您可以创建一个仅启动Vert.x的SpringBoot应用。然后,您的依赖性扫描程序将开始工作。

但是我首先要与Veracode一起检查它是否无法检查您的POM或Gradle构建文件,而不是扫描JAR。

答案 1 :(得分:0)

如果您的包装要求是veracode扫描件,则可能会尝试使用maven-assembly插件将项目工件包装到tar或zip中。 Veracode无法扫描另一个jar内的依赖项jar,以查找非spring引导项目。因此,您可以尝试以下方法之一。 i)使用maven-assembler插件进行tar打包,或ii)如果可以简化将其转换为spring-boot项目,或者iii)使用maven-shade插件进行uber-jar创建,并且需要进行一些配置更改以免被解包.class文件。仍然建议您可以使用tar打包选项进行探索-(参考:) https://maven.apache.org/plugins/maven-assembly-plugin/