【问题标题】:How to use Ivy/Ant to build using intermediate artifacts如何使用 Ivy/Ant 使用中间工件进行构建
【发布时间】:2023-04-07 11:11:01
【问题描述】:

我正在尝试修改我的构建过程,以便在我的个人项目中使用 ant 和 apache ivy。它们由一些共享模块和一些依赖于共享模块的应用程序模块组成。为了这篇文章,让我们简化一下,假设我有一个共享模块 (common) 和一个依赖于 common 的应用程序模块 (application)。每个模块都有自己的有效 svn 存储库:

svn_repo_1/common/trunk
                 /branches
                 /tags
svn_repo_2/application/trunk
                      /branches
                      /tags

我将相关修订签入到一个平面结构的公共工作区中:

workspace/common
workspace/application

一般来说,application 将依赖于 common 的已发布版本,因此在构建 application 时无需构建 common

但是,当我需要向 common 添加 application 所需的新功能时,我希望 application 依赖于我的工作区中最新的 common 构建(无需发布公共我的存储库)。

我认为这就是 latest.integration 的意思(即更改 application 的 ivy.xml 以指定最新版本的最新集成)。我的意图是使用 ivy buildlist 任务来查找在构建应用程序之前需要构建的本地模块。但是这不起作用,因为buildlist 任务似乎包含 common/build.xml 条目,无论应用程序的 ivy.xml 文件是否指定 latest.integration 或其他已发布的修订版。

如果有任何建议,我将不胜感激。我正在为 ivy 的文档和示例而苦苦挣扎,因此任何真实世界的示例也会有所帮助。注意:我对这里的 Maven 解决方案不感兴趣。

【问题讨论】:

    标签: ivy


    【解决方案1】:

    哇,这真是似曾相识!回到 3 到 4 个月前我在这个网站上的一些第一个问题,它们几乎都与常春藤有关!我 100% 同情你,Ivy 是一头难以学习和驯服的野兽,但在专业使用它几个月后,我再也不会没有它了。所以我的第一条建议是:继续前进。迟早,您在 Apache Ivy 上找到的任何小(实用)文档都会开始变得有意义并发挥作用。

    我可以理解为什么您不想将 common 发布到您的存储库中可能有一些情有可原的原因。但是,如果您是传递依赖管理的新手,我可以给您的第一条实用建议是您应该始终将您的 JAR/WAR/任何内容发布到您的 repo;不是您工作区本地的中介“集成”。

    原因很简单:Ivy 只能爬取您在设置文件中定义的存储库(基本上)。如果您故意将 common 之类的 JAR 保留在这些已定义的存储库之一之外,那么:(a) Ivy 无法解决传递依赖关系(它的主要工作),并且 (b) “下游”(依赖)JAR 无法解决每次调整 common 时都会动态更新。因此,仅将 Ivy 用于发布 JAR 有点适得其反;我很惊讶 Ivy 甚至将它作为一项功能。

    我想我需要了解您不发布 common 的动机。如果您只是在让ivy:publish 任务工作时遇到问题,不用担心,我可以提供大量示例来帮助您入门。但如果还有其他一些原因,那么我请您考虑这个解决方案:设置多个存储库

    也许您有一个“主要”存储库,其中大部分内容都会被发布;然后你有一个“次要”或“中间”存储库,你可以在其中发布common 到任何时候(对你来说)这样做是有意义的。然后,您可以使用两个不同的发布任务配置您的 Ant 构建,例如 publish-mainpublish-integration

    这样您就可以两全其美:您可以获得中间暂存区,并且可以将所有内容保持在 Ivy 的强大控制范围内。

    【讨论】:

    • 感谢您的回复。我不想在构建中间版本时发布common 的原因是因为我将 ivysvn 用于我的主存储库 - 因此已发布的工件被检入到单独的 svn 存储库中。我不希望不断提交 common-latest.integration.jar。我喜欢您的多个存储库建议的声音。我是否能够使用这两个存储库进行解析,以便我的主 ivysvn 存储库中的第 3 方工件从那里解析,而我的 common-latest.integration.jar 从本地目录存储库解析?
    猜你喜欢
    • 2012-05-31
    • 2018-01-10
    • 2013-03-11
    • 2012-09-04
    • 2011-01-18
    • 2013-06-14
    • 2019-11-09
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多