2013-10-22 87 views
2

我需要在編譯代碼之前執行一個java類,該類中包含主要方法。這是我到目前爲止已經試過:如何在compileJava之前執行'JavaExec'類型的任務

task runSimple(type: JavaExec) { 
    main = 'jjrom.ObjectGen' 
    classpath = sourceSets.main.runtimeClasspath 
    File prop1 = file(propFilePath) 
    args '-sqlserver', '-force', prop1.path 
    println "I'm done executing." 
} 
compileJava { 
    dependsOn runSimple 
} 

當我執行這個腳本命令「gradle這個compileJava」,我得到這個錯誤信息:

我做執行。

失敗:生成失敗,出現異常。

出了什麼問題:下面的任務之間的循環依賴:類---:compileJava ---:runSimple ---:類(*)

回答

1

如果您需要在編譯代碼時要執行這個類,你不能給它classpath = sourceSets.main.runtimeClasspath。後者包含編譯後的代碼,所以Gradle會自動推斷出runSimple.dependsOn compileJava,它與您的compileJava.dependsOn runSimple一起給出了循環任務依賴關係。 (準確地說,搖籃推斷runSimple.dependsOn classes,而這又取決於compileJava。)

0

如果你只需要與dependecies類路徑運行JavaExec,只是改變classpath變量是這樣的:

classpath = configurations.compile 

或者,如果你對特定的類路徑感興趣,可以添加像這樣的自定義配置:

configurations { 
    customClasspath 
} 

dependencies { 
    customClasspath files('path/to/your.jar') 
} 

task runSimple(type: JavaExec) { 
    main = 'jjrom.ObjectGen' 
    classpath = configurations.customClasspath 
    File prop1 = file(propFilePath) 
    args '-sqlserver', '-force', prop1.path 
    println "I'm done executing." 
} 

compileJava { 
    dependsOn runSimple 
} 
相關問題