我有一个项目,它生成一些类和资源,然后将它们打包到 jar 中。
执行生成操作的类有多个依赖项。生成的类没有依赖项。
我最初的解决方案是使用 Maven 程序集插件仅包含生成的文件。不幸的是,打包的 pom 包含了生成所需的所有依赖项。这个 jar 的使用者引入了一堆不必要的依赖项。
我研究了 Maven 阴影插件。我编译一次,使用mojo的exec插件运行生成器类,最后一次编译。然后阴影当然会在包装阶段运行。它创建一个没有过多依赖项的dependency-reduced-pom.xml
。因此,运行mvn clean package
并查看target/foo.jar
。我希望 meta-inf 文件夹中的 jar 是减少依赖项的 jar。但这是完整的 pom。我不知道生成的pom如何替换打包的pom。
我尝试的另一个糟糕的解决方案是使用多个配置文件及其自己的依赖项部分。我使用生成配置文件运行 Maven 一次,然后使用打包配置文件再次运行。这可行,但很糟糕,因为你必须运行多个 Maven 命令。这对 Jenkins 不友好。
我的处理方式是错误的吗?我应该如何安排一个项目来生成一些代码和一些文本文件,然后将它们打包在 Maven 友好的 Artifact 中?
最佳答案
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
匹配。
关于java - 如何使用maven生成代码并打包,无需依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113645/