2016-11-23 99 views
0

我有一個build.gradle文件看起來像這樣Gradle jar任務執行wsclean任務,爲什麼?

task wsimport{ 
    .... 
} 

task wsclean { 
    delete "${destDir.path}/com" 
} 

compileJava.source = ["${projectDir}/src/main/java", "${projectDir}/src/main/generated"] 

wsimport任務生成是從wsdl文件需要一些java文件。這一代需要一段時間,所以我不希望每次構建jar或編譯程序時都執行它。

wsclean任務旨在用於wsdl更改時。

首先我運行wsimport任務並確認文件生成正確,它們是!

但是現在當我運行gradle jar時,生成的文件被刪除。爲什麼?

當我註釋掉wsclean任務時,jar任務成功繼續。爲什麼叫gradle wsclean

注:我死了肯定我沒有明確創建jar.dependsOn wsclean

有一種說法我持有的是jar執行任務*clean任務。如果是這樣,我如何防止它發生?

+1

發佈一個複製問題的完整示例。我的猜測是它配置** wsclean任務,但不執行**它。即您可能會將清潔代碼放入任務的配置中,而不是執行。 –

+0

@JBNizet我沒有試圖執行它,我試圖不執行它 –

+0

我明白這一點。我所說的是,這個錯誤很可能是隱藏在wsclean任務中的'.....'中。無論您開始的任務如何,配置代碼都會執行。執行代碼僅在任務是圖的一部分時執行。但由於我們對這項任務一無所知,因此我們無法分辨。 –

回答

1

而不是

task wsclean { 
    delete "${destDir.path}/com" 
} 

你需要

task wsclean << { 
    delete "${destDir.path}/com" 
} 

task wsclean { 
    doLast { 
    delete "${destDir.path}/com" 
    } 
} 

否則,將刪除作爲配置階段,其中發生在每一個構建的一部分執行的,不管任務發起。請參閱https://docs.gradle.org/current/userguide/build_lifecycle.html

+0

我現在瞭解評論! –