我正在尝试将Java类作为gradle任务运行。
我已将此添加到我的build.gradle
:
task(downloadKeystore, dependsOn: 'classes', type: JavaExec) {
main = 'com.orbitbenefits.keystore.KeystoreDownloader'
}
但是,当我在命令行上运行时gradle downloadKeystore
,它失败并显示以下错误:
:Noa:downloadKeystoreError: Could not find or load main class com.orbitbenefits.keystore.KeystoreDownloader
所以我在这个问题中指定了一个类路径添加到我的任务中:
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 refresh时,通常会中断项目。看起来像这样:
但它看起来应该像这样:
我尝试过手动设置test / src根目录,但是它实际上并没有工作,而且我不希望其他开发人员必须这样做。
我也尝试过使用类似的方法手动设置类路径:
classpath = classpath('src/test/java/com/orbitbenefits/keystore')
但是我无法使其工作(gradle不喜欢它)。
问题
我只需要解决以下两个问题之一:
如何手动定义类路径?
或者
使用gradle刷新按钮时,如何使IntelliJ不弄乱项目结构?
您的IntelliJ存在问题,srcDirs = ['src/test/java/com/orbitbenefits/keystore']
因为src/test/java
它已经是一个包含某些源的文件夹。
一种解决方案是定义一个新文件夹,与src
您的KeystoreDownloader
课程所在目录同级,然后按如下所示导入密钥库:
keystore {
java {
srcDirs = ['keystore']
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句