我試圖運行一個Java類作爲一個gradle任務。然而使用自定義類路徑在Gradle任務中運行Java類
task(downloadKeystore, dependsOn: 'classes', type: JavaExec) {
main = 'com.orbitbenefits.keystore.KeystoreDownloader'
}
,當我在命令行gradle downloadKeystore
上運行時,出現以下錯誤:
我已經加入這個我build.gradle
:Noa:downloadKeystoreError: Could not find or load main class com.orbitbenefits.keystore.KeystoreDownloader
所以我添加了一個類路徑我的任務如下:this question:
task(downloadKeystore, dependsOn: 'classes', type: JavaExec) {
main = 'com.orbitbenefits.keystore.KeystoreDownloader'
classpath = sourceSets.main.runtimeClasspath
}
然而,這是非常長的類路徑中大的傳統項目,所以當我運行gradle downloadKeystore
我得到另一個錯誤:
Caused by: java.io.IOException: Cannot run program "C:\Program Files\Java\jdk1.8.0_77\bin\java.exe" (in directory "C:\Users\pawlakj\IdeaProjects\noa\Noa"): CreateProcess error=206, The filename or extension is too long
所以我修改了我sourceSets
在build.gradle
所以現在看起來是這樣的:
sourceSets {
main {
java {
srcDirs(...)
}
resources {
srcDirs(...)
}
}
keystore {
java {
srcDirs = ['src/test/java/com/orbitbenefits/keystore']
}
}
test {
java {
srcDirs(...)
}
resources {
srcDirs(...)
}
}
}
...
task(downloadKeystore, dependsOn: 'classes', type: JavaExec) {
main = 'com.orbitbenefits.keystore.KeystoreDownloader'
classpath = sourceSets.keystore.runtimeClasspath
}
這可以在命令行上運行,但是當我在IntelliJ中運行gradle刷新時,它通常會中斷項目。它看起來像這樣:
但它應該是這樣的:
我已經手動嘗試設置測試/ src目錄的根目錄,但它並沒有真正的工作,也是我不希望其他開發者必須這樣做。
我自己也嘗試手動設置classpath中使用類似:
classpath = classpath('src/test/java/com/orbitbenefits/keystore')
但我無法使它工作(gradle這個不喜歡它)。
問題
我只需要解決這兩個問題之一:
我怎麼能手動定義的類路徑?
OR
我怎樣才能讓的IntelliJ利用其gradle這個刷新按鈕時不會弄亂項目結構?