IVY - 多项目本地构建 - 模仿“解决工作空间中的依赖关系”

Posted

技术标签:

【中文标题】IVY - 多项目本地构建 - 模仿“解决工作空间中的依赖关系”【英文标题】:IVY - multiproject local build - mimcking "resolve dependencies in workspace" 【发布时间】:2015-02-16 17:06:37 【问题描述】:

我有三个项目:A、B、C 以及应该编译它们的 ant 中的 build.xml。

C 依赖于 B,而 B 又依赖于 A

到目前为止,我的所有依赖项都在 eclipse 中,并且我在 ant 中有一个 build.xml:

<eclipse.incrementalBuild project="A" kind="incremental"/>
<eclipse.incrementalBuild project="B" kind="incremental"/>
<eclipse.incrementalBuild project="C" kind="incremental"/>

现在,我有 ivy.xml 文件 - 例如:

<ivy>
   <ivy module="B"/>

   <dependencies>
       <dependency name="A">
   </dependencies>
</ivy>

现在,当我按此顺序将 A、B、C 发布到存储库(我使用 sonatype nexus 存储库)时,一切都很好,因为存储库也用于解析,所以过程是: 1. 解决 A 的依赖关系 - 没有 2.将当前工作区A中的jar作为jar上传到repository 3. 解决 B 的依赖关系 - A 被解析为依赖关系 4.将当前工作区B中的jar作为jar上传到存储库 5. 解析 C - B 和 A 的依赖关系被解析为依赖关系 6. 将当前工作区C中的jar作为jar上传到repository

我认为它发布到 nexus 的方式是为了交付产品

我需要的是一个简单的 build.xml 来编译我的项目 - 所以我不想一直发布新版本。 相反,我正在寻找使用常春藤的方法 1.编译A 2.然后使用已经编译的A编译B 2.然后用已经编译好的B,A编译C

我曾考虑在文件系统中使用本地存储库,其中制作了第 1-6 阶段 - 生成要使用的本地 jar - 但是,这有点麻烦,因为: 1. 我的解析必须包含两个解析器——nexus repo 之前的文件系统——这意味着在真正的发布中,我必须记住删除本地 jar 2. 对于我认为可能有更简单解决方案的事情来说,这听起来有点太多了。

本质上,我想模仿 eclipse 的 IVY 插件,它可以解决工作空间中的依赖关系并使用工作空间中的其他项目编译项目——但我正在寻找最好的、最推荐的方法。

谢谢

【问题讨论】:

【参考方案1】:

你说:

我有三个项目:A、B、C 和 ant 中的 build.xml,应该 编译它们。

这表明您的项目实际上是一个大型单体构建。

相反,您需要模拟 Maven 的工作方式。每个模块都需要有自己的构建文件和列出该模块依赖项的 ivy 文件。每个模块都将自己的 jar 工件发布到存储库(本地或远程)中,从而使其他模块可以使用 ivy 解析操作访问它。

以下示例提供了有关使用 ivy 进行多模块构建的 ivy 文档的链接。

ivy simple shared repository Ivy: Using dynamic revisions

拆分一个大项目并不容易,希望对你有帮助。

【讨论】:

以上是关于IVY - 多项目本地构建 - 模仿“解决工作空间中的依赖关系”的主要内容,如果未能解决你的问题,请参考以下文章

常春藤发布到存储库不会更新本地缓存

Apache Ant + Ivy 构建了一个部署到本地 Tomcat 的 Web 应用程序

构建启用了Ivy的monorepo Angular9库是个坏主意

应该如何设置 Jenkins 中的 Ivy 构建项目?

Jenkins:基于linux构建ivy项目

如何为项目/lib 中的本地 jar 创建 Ivy 依赖项?