2013-07-31 134 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'。 –