2013-07-31 103 views
2

我有这样的Java项目有我导入一个Ant build.xml文件的一些任务,例如:Ant任务自动运行

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的依赖项。为什么它被执行?

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

+0

'antCompile'将在'jar'之前运行,因为构建脚本会这么说('jar.dependsOn(antCompile)')。 –

回答

0

似乎按预期工作。构建脚本使得jar取决于antCompile,根据你的话取决于-compileassemble取决于jar,所以执行gradle assembmle应首先运行-compile

在任何情况下,应该说ant.importBuild具有已知的局限性,并且与直接运行Ant构建相比,可能会导致行为上的差异。当你不用Gradle自己的抽象来描述构建时,你也会失去许多Gradle的优点。因此,我建议将构建移植到Gradle,而不是使用ant.importBuild(在现实世界中不常用)。请注意,在Gradle不提供任何等效的情况下重用Ant 任务是完全正确的。

+0

是的,我导入了一个Ant构建,因为我很难用Gradle来模仿相同的行为。对于这个问题已经有一个问题,但没有人回答,我需要这个尽快。但是,在完成我的Gradle + Ant构建之后,我意识到现在我可以完全使用Gradle来满足我需要,因为我明白如何达到与Ant相同的结果(我之前没有)。 –

+0

此外,对我来说,任务构建顺序仍然没有多大意义。我不认为它应该这样工作。我不确定'-compile'是什么,你的意思是'-setup'吗? –

+0

你在你的问题中提到'-compile'。 –