在vertx项目中配置maven打包fat jar而不解包依赖,就像spring boot那样

Configure maven to package fat jar without unpacking dependencies in a vertx project, like spring boot does

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

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

我们还有另一个 spring 启动项目,它按预期工作。似乎最终的 spring 引导 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 启动应用程序获得同样的重新打包行为?

你不能用 Vert.x 做到这一点,因为它不进行花哨的类加载。

但由于它是可嵌入的,您可以创建一个刚启动的 SpringBoot 应用程序 Vert.x。然后你会让你的依赖扫描器工作。

但如果 Veracode 无法检查您的 POM 或 Gradle 构建文件而不是扫描 JAR,我会首先检查它。

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