从蚂蚁迁移到Maven生产100多个罐子

时间:2011-12-11 16:43:55

标签: maven maven-2 ant

我们正在尝试将构建版本从ant迁移到maven。我正在努力的项目正在使用ant。脚本是真正复杂的,其中构建工件是具有明确目录结构的zip文件。 Build创建了大约108个独特的jar并将它们打包到这个zip文件以及许多配置文件和其他第三方jar。

即使迁移到Maven,我们也需要此zip文件与现在相同。我现在只是Maven的学习者。我的问题是,如果有一种方法,我可以使用一个pom.xml来生成更多的jar文件,提供jar和包含列表,排除每个包的包。

我用Google搜索并发现,如果我们需要来自一个项目但不同包的多个jar,我们可以通过在每个包中放置一个pom.xml(jar将从此包创建)并使用依赖关系管理进行绑定来实现。

但这并不能解决我的问题,因为拥有100多个pom.xmls似乎并不是一个好主意。

希望我的问题清楚明了。请建议是否有出路。

2 个答案:

答案 0 :(得分:1)

在这里添加到Udo的答案是另一个Sonatype blog posting,其中的图表解释了从单个Maven项目生成多个罐子的Maven反模式。

两篇文章都建议对代码采用模块化结构,而不是与Maven将大型项目分离为一组相互关联的子模块的方法作斗争。

增量发布方法

首先查看您实际计划分享的工件。您的邮件表明您实际发布的唯一文件是包含100多个罐子和其他文件的大型zip文件?

您可以调用Maven command-line tool将此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数量所淹没....在哪个时候,将那个罐子的构建重组为一个子模块会更简单。

替换切换构建技术

离开传统的ANT构建非常困难。这些通常包含复杂,自定义且难以重现的构建逻辑。对于此类项目,我建议使用Apache ivy将第三方依赖项外部化,并与其他项目(可能正在使用Maven)共享工件。

为此,我编写了一个ant2ivy脚本,用于生成初始常春藤设置,基于ANT项目目录中已存在的jar(通常与源一起提交)。

使用常春藤并不能让你远离创建项目子模块的好主意。但是它确实使您能够实现ANT构建的现代化。

更新

是的,有Maven ANT tasks可用。我不使用它们,因为它们基于Maven 2.我很失望,我们仍在等待他们的Maven 3替换aether-ant-tasks(仅可从GitHub获得)。 Ivy仍然是将非Maven客户端与Maven存储库集成的第一选择

答案 1 :(得分:0)

你可以generate multiple jars out of one project

它并不是最佳实践。查看提供的文章并自行决定。

在包含中,您不仅限于包装,但这肯定会让它更容易。 :)