我面临着我无法解释的行为,使用 gradle 1.10 我有:
settings.gradle:
include('lib1', 'lib2', 'web')
build.gradle:
subprojects {
apply plugin: 'java'
}
project(':web') {
apply plugin: 'war'
dependencies {
compile project(':lib1')
}
task myTask(type: JavaExec, dependsOn: 'compileJava') {
main = "some.thirdparty.Class"
args "--searchPath", configurations.runtime.asPath
}
}
project(':lib1') {
dependencies {
compile project(':lib2')
}
}
project(':lib2') {
}
当我运行
gradle clean war
我只有 lib1.jar
在 war/build/libs/web.war/WEB-INF/lib
.制作
WEB-INF/lib
包含lib1.jar
和 lib2.jar
我必须:project('web')
block 到文件末尾configurations.runtime.asPath
至configurations.runtime
(但我需要提供类路径作为路径,所以不是解决方案)我读了build lifecycle描述,试图比较 --debug 输出,但这没有帮助。
为什么会这样?将模块运行时类路径作为 JavaExec 任务中的路径提供什么是一个好的解决方案?
最佳答案
asPath
解析配置,但只有在执行时而不是配置时(特别是在存在项目依赖项的情况下),解析才会正确工作。尝试包装 args
符合 doFirst { ... }
.
关于在自定义任务中使用 'configurations.runtime.asPath' 时,Gradle war 忽略传递依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22523790/