【问题标题】:gradle project dependencies using ant files to build使用ant文件构建gradle项目依赖
【发布时间】:2014-04-24 16:47:32
【问题描述】:

我们有一个使用 ant 构建的自定义构建应用程序。 这个应用程序,称之为 Bob 读取一个 xml 文件以了解项目间的依赖关系。

我有以下项目文件/目录结构。

--root
|--P1
|--P2
|--P3
|--P4

每个项目(root 除外)都有一个 build.xml 文件。 所以 Bob 的项目间依赖 xml 文件可能如下所示:

 <project name="P1">
 </project>

 <project name="P2">
  <dependencies>
    <dependsOn name="P1"/>
  </dependencies>
 </project>

 <project name="P3">
  <dependencies>
    <dependsOn name="P2"/>    
  </dependencies>
 </project>

 <project name="P4">
  <dependencies>
    <dependsOn name="P2"/>    
    </dependencies>
 </project>

</projects>

所以你可以看到的依赖树看起来像这样

--root
  |P1
    |--P2
       |--P3
       |--P4

要使用 ant 构建每个项目,您只需调用构建目标即可。如果您告诉 Bob 构建 P3,它知道为每个项目调用 ant,顺序为 P1、P2 和 P3。

使用 Gradle 的 ant.importBuild 'builder.xml' 并定义上述项目结构以使构建顺序始终正确的最简单方法是什么?

我不想重组目录来完成这项工作。

【问题讨论】:

    标签: ant build gradle


    【解决方案1】:

    您必须定义一个多项目 Gradle 构建,并根据需要连接 Ant 目标(导入后成为 Gradle 任务)。但是,您最终会得到一个与您的旧 Ant 构建相似的旧 Gradle 构建,并且错过了 Gradle 的大部分优势。如果您硬着头皮将构建移植到 Gradle,您更有可能获得良好且持久的结果。移植的构建仍然可以偶尔在真正需要的地方重用 Ant 任务,但不应导入任何 Ant 脚本。

    【讨论】:

    • 假设每个项目中的每个 ant 构建文件都包含一个名为“build”的目标。我如何在 P2 之前和 P3 和 P4 之后在 P1 上调用这个目标?现在还没有做一个完整的端口。这里的管理层喜欢在他们咬他们之前先吃掉他们的子弹:)
    • 你不能轻易地将项目 X 中的所有任务运行在 Y 中的任何任务之前,这也是错误的做法。相反,您必须单独建模任务依赖关系,例如compile.dependsOn(":otherProject:jar")。但是,一旦您真正移植构建,这项工作将有些过时。
    • 我知道任务之间存在依赖关系,例如在jar之前编译,但是如何表达项目之间的依赖关系?
    • 查看我之前的评论。有关详细信息,请参阅Gradle User Guide 中的“多项目构建”一章。
    • 澄清一下,所有的执行依赖都在任务之间,而不是项目之间。即使像 dependencies { compile project(":other") } 这样的东西最终也会被翻译成任务依赖关系,比如 compileJava.dependsOn(":other:jar"),但是这种表示法对于惯用的构建非常有用。
    猜你喜欢
    • 2015-10-06
    • 2013-01-30
    • 2015-11-30
    • 2020-08-27
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2021-12-10
    • 2019-08-24
    相关资源
    最近更新 更多