我有一个奇怪的场景,Gradle似乎正在尝试编译" .java"位于jar文件内的文件我设置为依赖项。我做这样的事情:
dependencies {
testCompile fileTree(dir: './libs', include: ['*JarResources/Java/*.jar'])
testCompile group: 'junit', name: 'junit', version: '4.11'
}
...我有一个相当大的jar依赖列表。当我尝试运行我的测试时,它在编译阶段失败,它无法找到隐藏在jar文件中的Java文件的符号。其中一些jar依赖项打包,其源位于相应的.class旁边。我尝试在源代码集中使用包含过滤器无效。
sourceSets {
main {
java {
exclude 'com/mypkg/other/**'
}
}
test {
java {
include 'com/mypkg/test/**'
}
}
}
我可以使用它的gradle-aware make在IntelliJ 13中运行测试而没有问题(这里我正确地单击单元测试并运行它们)因为它足够聪明来构建依赖类路径而不将文件传递给Javac但是不知何故,相同的build.gradle从命令行失败。这是一个已知的问题,Gradle会自动将依赖关系传递给javac,因为它在Jar文件中找到它们吗?
答案 0 :(得分:2)
您看到的是Java编译器的默认行为(源路径默认为类路径,源路径上的文件被编译)。一种方法是明确地将源路径设置为"没有":
tasks.withType(JavaCompile) {
options.compilerArgs += ["-sourcepath", "''"]
}
PS:并非所有工具/ IDE都可以处理Jars中的来源,因此将它们放在单独的来源Jar中通常会更好。