我有一个项目可以生成一些类和资源,然后将它们打包到jar中。
执行生成的类有几个依赖项。生成的类没有依赖项。
我最初的解决方案是使用maven程序集插件仅包含生成的文件。不幸的是,打包的pom包含了生成所需的所有依赖项。这个jar的消费者会引入一堆不必要的依赖。
我查看了maven shade插件。我编译一次,使用mojo的exec插件运行生成器类,编译最后一次。然后阴影当然在包装阶段运行。它会创建一个没有过多依赖关系的dependency-reduced-pom.xml
。因此,请运行mvn clean package
并查看target/foo.jar
。我希望meta-inf文件夹中的jar是减少的依赖jar。但它是完整的pom。我不知道生成的pom如何取代打包的pom。
我尝试的另一个糟糕的解决方案是使用多个配置文件和自己的依赖项部分。我使用生成配置文件运行maven一次,然后再使用包装配置文件运行maven。这很有效,但很糟糕,因为你必须运行多个maven命令。这不是詹金斯友好的。
我是以错误的方式来做这件事的吗?我应该如何安排生成一些代码和一些文本文件的项目,然后将这些文件打包在maven友好工件中?
答案 0 :(得分:1)
1)一种可能性是制作所有依赖项<optional>true</optional>
。
pom仍然具有依赖关系,但使用您的库的项目不会尝试下载它们。
2)将plugin dependencies与exec插件一起使用。
如果在另一个项目中定义了生成器类,那么这很有效。
理想情况下,您可以使用插件调用生成器,并避免将这些依赖项添加到项目中。这可能不值得做,这取决于您的项目是什么以及您的发电机必须具有的可重用性。
3)如果您使用的是maven-shade-plugin
,则通常会使用dependency-reduced-pom.xml
。检查.m2存储库以查看执行mvn install
时复制到其中的pom的内容。它的内容可能与dependency-reduced-pom.xml