【问题标题】:How to use maven to publish multiple artifacts of an ivy project(with multiple modules) to a maven repository(nexus)如何使用 maven 将 ivy 项目(带有多个模块)的多个工件发布到 maven 存储库(nexus)
【发布时间】:2013-12-15 17:52:48
【问题描述】:

我正在开发一个复杂的多模块开源 ivy 项目,该项目的顶层有 ant 的 build.xml 以启动每个 ivy 模块的构建。但是这里的目标不是修改原始构建脚本(ivy.xml和build.xml),而是使用maven作为外层启动ant build,然后获取构建结果并将它们发布到nexus服务器。

这里的难点在于,这里构建的工件是多个jar,我们需要将所有这些jar发布到带有maven的nexus服务器。由于一个 pom.xml 只映射一个 maven artifafct,在这种情况下,多个工件不是通过 maven 而是通过 ivy 构建的。所以我想知道是否有可行的方法来实现我的目标。

目前,在顶级 pom.xml 中,我使用 maven-antrun-plugin 在顶级调用 build.xml,并使用 build-helper-maven-plugin 附加工件,但它不起作用。

【问题讨论】:

    标签: maven publish


    【解决方案1】:

    目前我正在处理与您类似的任务。我们有一个巨大的、完整的遗留系统,整个构建都是用 ant 编写的。这就是我们处理这项任务的方式:

    1. 无论如何,您都必须接受它,maven = jar per artifact(好吧,您可以使用带有限定符的附件,但这是一种真正的滥用,强烈不推荐)。它有它的哲学:归根结底,你的系统由(正如你自己所说的)模块组成,所以每个模块都必须有它的版本、来源和(最重要的)依赖项其他模块。
    2. 要重用现有的 ant 代码,您可以查看 antrun 插件。我们所做的是“简单地”将所有常见的构建代码(即生成器执行、附件创建、程序集等)分离到类型为“pom”的 parent pom ”。然后我们只需通过激活子 pom 中的属性来执行相关目标。这是一个例子

      <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-antrun-plugin</artifactId>
              <version>1.7</version>
              <executions>
                  <execution>
                      <id>EXECUTION_NAME</id>
                      <phase>generate-sources</phase>
                      <goals>
                          <goal>run</goal>
                      </goals>
                      <configuration>
                          <target if="EXECUTION_TRIGGER_PROPERTY">
                              <taskdef resource="net/sf/antcontrib/antlib.xml"/>
                          </target>
                      </configuration>
                  </execution>
              </executions>
          </plugin>
      </plugins>
      </build>
      

      在子 pom 中我们简单地定义

      <properties>
        <EXECUTION_TRIGGER_PROPERTY>true</EXECUTION_TRIGGER_PROPERTY>
      </properties>
      

      记得查看maven lifecycle guide 以选择合适的执行阶段。

    3. 不要忘记您可以使用 maven 插件让事情变得更简单。例如,不是在 ant 中运行 &lt;javac&gt; 任务,而是使用 jar 类型的工件为您完成所有编译。您还可以找到生成 javadoc、jaxws 等的插件。

    如您所见,让您的系统与 maven 一起工作并不是那么简单。这将要求您重新考虑构建的工作方式。另一方面,在大多数情况下,查看和理解依赖项的能力、在现代 IDE 中工作的便利性、二进制存储库等等都是值得的。

    【讨论】:

    • 谢谢,您的回答令人鼓舞。目前,我发现解决此问题的一种方法是使用 maven 的安装/部署插件并使用“安装/部署文件”目标。然后创建多个执行,这些执行将找到要发布的 jar,指定工件详细信息,并为每个工件生成 pom 文件。当然应该有一个主要的工件要构建,我们可以将其设为默认。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多