【问题标题】:Ant task imported from build.xml in Gradle script is running automatically从 Gradle 脚本中的 build.xml 导入的 Ant 任务自动运行
【发布时间】:2013-07-31 16:03:28
【问题描述】:

我有这个 Java 项目,我导入了一个带有一些任务的 Ant build.xml 文件,如下所示:

ant.importBuild 'build.xml'

task myTaskA(dependsOn: ':Modules:MyModule:assemble') << {
    // do stuff here...
}

compileJava.dependsOn(myTaskA)

configure(jar) {
    include 'classes.dex'
}

jar.dependsOn(antCompile)

任务antCompile 来自Ant build.xml 脚本。但是,由于某种原因,在调用 gradlew assemble 时会在启动时调用此任务,它甚至不会等待 jar 任务启动。

另外,antCompile 任务在 build.xml 中定义为以下目标:

<target name="antCompile" depends="-setup">

</target>

那个 Ant 目标,-compile总是在我调用 gradlew assemble 时要执行的第一个任务。这没有任何意义。该任务永远不会在任何地方调用,它只是 antCompile 的依赖项。为什么会被执行?

这显然不是我想要的……我怎样才能防止这种行为?

【问题讨论】:

  • antCompile 将在 jar 之前运行,因为构建脚本是这样说的 (jar.dependsOn(antCompile))。

标签: ant import gradle task


【解决方案1】:

似乎按预期工作。构建脚本使jar 依赖于antCompile,根据您的话,它依赖于-compileassemble 依赖于jar,所以执行gradle assembmle 应该先运行-compile

无论如何,应该说ant.importBuild 具有已知的局限性,与直接运行Ant 构建相比,可能会导致行为差异。此外,如果不根据 Gradle 自己的抽象来描述构建,您将失去 Gradle 的许多优势。因此,我建议将构建移植到 Gradle,而不是使用 ant.importBuild(在现实世界中并不经常使用)。请注意,在 Gradle 不提供任何等价物的情况下,重用 Ant 任务 非常好。

【讨论】:

  • 是的,我正在导入 Ant 构建,因为我很难仅使用 Gradle 来模仿相同的行为。 SO上已经有一个问题,但没有人回答,我需要尽快解决这个问题。但是在完成我的 Gradle + Ant 构建之后,我意识到我现在可以完全使用 Gradle 来满足我的需要,因为我完全了解如何获得与使用 Ant 相同的结果(我以前没有)。
  • 另外,任务构建顺序对我来说仍然没有多大意义。我认为它不应该那样工作。我不确定-compile 是什么,你的意思是-setup
  • 您在问题中提到了-compile
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多