【问题标题】:Migration from ant to Maven producing 100+ jars从 ant 迁移到 Maven 产生 100 多个罐子
【发布时间】:2012-01-17 22:27:33
【问题描述】:

我们正在尝试将我们的构建从ant 迁移到maven。我正在工作的项目是使用ant 自多年以来。脚本非常复杂,其中构建工件是具有明确目录结构的 zip 文件。 Build 创建了大约 108 个独特的 jar,并将它们与许多配置文件和其他 3rd 方 jar 一起打包到这个 zip 文件中。

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

我搜索了一下,发现如果我们需要来自一个项目的多个 jars 但不同的包,我们可以通过在每个包中放置一个 pom.xml 来实现(jar 将从这个包创建)并使用依赖管理绑定所有内容。

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

希望我已经把我的问题说清楚了。请建议是否有出路。

【问题讨论】:

  • “即使在迁移到 Maven 之后,我们也需要这个 zip 文件与现在相同。” -> 如果这是您的要求,那么 Maven 是错误的工具。把这个方钉钉进一个圆孔里,麻烦多过。

标签: maven maven-2 ant


【解决方案1】:

在 Udo 的回答中添加另一个 Sonatype blog posting,其中的图表解释了从单个 Maven 项目生成多个 jar 的 Maven 反模式。

两篇文章都建议对您的代码采用模块化结构,而不是反对 Maven 将大型项目解耦为一组相互关联的子模块的方法。

增量发布方法

从查看您实际计划分享的文物开始。您的邮件表明您实际发布的唯一文件是一个包含 100 多个 jar 和其他文件的大型 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 的数量所淹没......到那时将 jar 的构建重新构建为子模块会更简单。

切换构建技术的替代方案

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

为此,我编写了一个 ant2ivy 脚本,用于根据 ANT 项目目录中已经存在的 jars(通常与源代码一起提交)生成初始 ivy 设置。

使用 ivy 并不能让您忘记创建项目子模块是个好主意。但是,它确实使您能够现代化您的 ANT 构建。

更新

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

【讨论】:

    【解决方案2】:

    你可以generate multiple jars out of one project

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-15
      • 2022-01-07
      • 2015-09-21
      • 2020-02-13
      • 1970-01-01
      • 2014-09-16
      • 2020-09-29
      • 2013-09-07
      相关资源
      最近更新 更多