我试图运行一个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这个刷新按钮时不会弄乱项目结构?