gradle在jar文件中编译.java?

时间:2014-09-18 23:35:59

标签: java intellij-idea gradle

我有一个奇怪的场景,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文件中找到它们吗?

1 个答案:

答案 0 :(得分:2)

您看到的是Java编译器的默认行为(源路径默认为类路径,源路径上的文件被编译)。一种方法是明确地将源路径设置为"没有":

tasks.withType(JavaCompile) {
    options.compilerArgs += ["-sourcepath", "''"]
}

PS:并非所有工具/ IDE都可以处理Jars中的来源,因此将它们放在单独的来源Jar中通常会更好。