我们正在尝试将我们的构建从ant
迁移到maven
。我正在工作的项目是使用ant
,因为年龄。脚本非常复杂,其中构建工件是具有明确目录结构的zip文件。Build创建了大约108个独特的jar文件,并将它们与许多配置文件和其他第三方jar文件一起打包到这个zip文件中。
我们需要这个zip文件与现在一样,即使迁移到Maven之后。到目前为止,我只是Maven的一个学习者。我的问题是,如果有一种方法,我可以使用一个pom.xml来生成多个jar文件,提供jar列表和包含,排除每个包。
我搜索了一下,发现如果我们需要来自一个项目的多个jar但不同的包,我们可以在每个包上放置一个pom.xml (jar将从这个包创建),并使用依赖关系管理将它们绑定在一起。
但这并不能解决我的问题,因为有100+ pom。xml似乎不是一个好主意。
希望我已经把问题说清楚了。请告诉我是否有出路。
除了Udo的回答之外,这里还有另一篇Sonatype博客文章,其中有一个图,解释了从单个Maven项目生成多个jar的Maven反模式。
两篇文章都建议对代码采用模块化结构,而不是反对Maven将大型项目解耦为一组相互关联的子模块的方法。
增量发布方法
从查看您实际计划共享的工件开始。您的邮件表明,您实际发布的唯一文件是一个包含100多个jar和其他文件的大型zip文件?
您可以调用Maven命令行工具将此zip文件发布到Maven存储库:
mvn deploy:deploy-file
-Durl=$REPO_URL
-DrepositoryId=$REPO_ID
-DgroupId=org.myorg
-DartifactId=myproj
-Dversion=1.2.3
-Dpackaging=zip
-Dfile=myproj.zip
此方法也可用于发布jar和pom(包含依赖项)。最终,要维护的pom数量将使您不堪重负....这样的话,把jar重构成子模块就简单多了。
切换构建技术的备选方案
要摆脱遗留ANT构建是非常困难的。这些通常包含复杂的、自定义的和难以重现的构建逻辑。对于这样的项目,我建议使用Apache ivy来具体化第三方依赖,并与其他项目(可能使用Maven的项目)共享工件。
为此,我编写了一个ant2ivy脚本,用于基于ANT项目目录中已经存在的jar(通常与源代码一起提交)生成初始ivy设置。
使用ivy并不能让你摆脱创建项目子模块是个好主意的事实。然而,它确实使您能够现代化您的ANT构建。
更新是的,有可用的Maven ANT任务。我不用它们是因为它们是基于Maven 2的。我很失望,我们仍然在等待他们的Maven 3替代品ether-ant-tasks(仅在GitHub上可用)。Ivy仍然是集成非Maven客户端和Maven存储库的首选
你可以在一个项目中生成多个jar。
这并不是最佳实践。看所提供的文章,自己决定。
在include中的并不局限于包,但是这确实使它更容易。:)