【问题标题】:use ivy java project in maven?在 Maven 中使用 ivy java 项目?
【发布时间】:2012-11-09 17:38:42
【问题描述】:

我有一个大型 maven 项目,其中有许多子项目也是基于 maven 的。

我开始使用 Red5,red5 创建了一个基于 ivy 的项目。我需要将该项目添加到依赖项中。

列出项目主目录的文件:

build.properties  build.xml  ivy.xml  ivysettings.xml  lib  readme.txt  src  www

如何将此项目添加为 maven 项目依赖项之一?

在 Maven 3.0.4 中使用 Java

谢谢! 冷杉

【问题讨论】:

  • 您可以将其 JAR,然后将其添加到本地 maven 存储库。之后,你可以把它放在你的 pom.xml
  • 我不喜欢 jar 它,只是为了使它成为其他项目之一。我会修改很多,每次都去jar会不舒服

标签: java maven ivy


【解决方案1】:

我自己没有使用过它,但我知道 Ivy 有一个 task which can convert an ivy file to a maven pom. 我会探索一个选项,让我的 CI 环境运行该任务以在成功构建后生成一个 pom,然后让我的 maven 项目查看在 CI 的 jar 和 pom 的最新工件上。您也可以跳过 CI 环境,让 maven 从本地文件系统解析工件。

【讨论】:

    【解决方案2】:

    有趣...常春藤项目中的lib 目录。

    您可以修改 build.xml 以再创建一个调用 <ivy:makepom/> 目标的目标。只要确保首先调用<ivy:resolve>。这将创建您需要的一小部分pom.xml 文件。

    至于其余的。这是什么技术术语?哦,是的,你被搞砸了。

    问题在于 Ant 和 Maven 有两种完全不同的构建理念。在 Ant 中,您编写了一个 build.xml 脚​​本来描述您想要构建的内容以及您希望如何构建它。在 Maven 中,您通过pom.xml 文件描述您的项目,Maven 会为您完成所有构建处理。

    这不是 Ant 或 Maven 是否是世界上所有美好事物的力量的问题,另一个问题仅适用于 luzers Apple Fanboys。这是一个手动将预先存在的项目转换为 Maven 的案例。

    您必须查看您的build.xml 并弄清楚它在做什么。然后,您需要将其转换为 Maven pom.xml 文件。没有办法自动执行此操作。更糟糕的是,Red5 不像 Maven 项目那样设置,所以你要么必须移动所有文件,要么进入古老的pom.xml 配置地狱,试图覆盖 Maven 假设构建应该发生的方式。这可能需要几天甚至几周的时间才能正确完成。而且,最终,您会得到一个您无法控制的项目,如果您想更新,就必须从头开始重新完成。

    相信我,我之前在另一份工作中这样做过,系统架构师认为 Maven 比 Ant 更好,我们所有的项目都必须从 Ant 转换为 Maven。而且,谁被这个任务困住了?不是那些忙于其他任务的开发人员,而是我的配置经理。

    最后,您将拥有一个您无法控制的项目,如果您想更新,就必须从头开始重新完成。


    还有一个选择:忽略它。

    Red5 是否是 Ivy 项目真的很重要吗?无论如何,您需要从这个 Red5 项目中得到什么?你需要 red5.jar 还是构建的发行版。

    如果您需要分发,请将其保留为 Ivy 项目。只需将ivysettings.xml 设置为指向您的Maven 存储库并让它知道它是Maven 2 格式。常春藤将毫无问题地从中获取东西。那如果是常春藤呢?

    如果您在其他 Maven 项目中只需要 red5.jar 文件,您可以简单地使用 <ivy:makepom/> 任务为您生成 pom.xml 文件。然后使用mvn deploy:deploy-file 将该jar 部署到您的Maven 存储库中:

     $ mvn deploy:deploy-file -Dfile=red5.jar \
         -DpomFile=pom.xml \
         -DrepositoryId=$repoId \
         -Durl=$url
    

    现在,您的 red5.jar 作为一个完全可传递的下载 jar 在您的 Maven 存储库中。如果你真的,真的想变得花哨,你可以将生成的 pom.xml 文件嵌入到 jar 本身中,所以它就像 Maven jar 一样自引用。破解当前的 build.xml 文件大约需要 30 分钟。 (或者,如果您的 jar 不必在其中嵌入 pom.xml,则可以使用一个单独的 Ant 文件来构建您需要的 pom.xml,甚至可以为您将其部署到您的 Maven 存储库中。这样,如果项目已更新,您不必担心 build.xml 文件正在更新。

    【讨论】:

      【解决方案3】:

      我认为如果不创建 JAR,您将无法逃脱。 Maven 的整个依赖理念是围绕存储库中的 JAR 文件构建的——当一个 maven 项目依赖于另一个项目时,它的工作方式是依赖项目构建其 JAR 并将其放入本地存储库,然后主项目从那里依赖它。

      也就是说,您可以使用 <ivy:makepom>Maven Ant Tasks 的组合相当轻松地自动执行此操作。这个想法是让 Ivy 项目构建它的 JAR 并将其作为每次构建的一部分推送到本地 Maven 存储库,以便 maven 项目可以立即使用它。

      <jar destfile="project.jar">
         <fileset dir="classes" />
      </jar>
      
      <ivy:makepom ivyfile="ivy.xml" pomfile="project.pom" conf="default,runtime">
         <mapping conf="default" scope="compile"/>
         <mapping conf="runtime" scope="runtime"/>
      </ivy:makepom>
      
      <artifact:pom id="project.pom" file="project.pom" />
      <artifact:install file="project.jar" pomRefId="project.pom" />
      

      确保您的 Ivy 项目在其ivy.xml 中有一个以-SNAPSHOT 结尾的版本号。

      【讨论】:

        猜你喜欢
        • 2015-07-24
        • 1970-01-01
        • 2013-10-15
        • 2011-10-21
        • 2014-03-11
        • 2011-04-14
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        相关资源
        最近更新 更多