Gradle在jar文件中编译.java?

Gradle在jar文件中编译.java?,java,intellij-idea,gradle,Java,Intellij Idea,Gradle,我遇到了一个奇怪的场景,Gradle似乎正在试图编译位于我设置为依赖项的jar文件中的“.java”文件。我是这样做的: dependencies { testCompile fileTree(dir: './libs', include: ['*JarResources/Java/*.jar']) testCompile group: 'junit', name: 'junit', version: '4.11' } …我有一个相当大的jar依赖项列表。当我尝试运行测试时,它

我遇到了一个奇怪的场景,Gradle似乎正在试图编译位于我设置为依赖项的jar文件中的“.java”文件。我是这样做的:

dependencies {
    testCompile fileTree(dir: './libs', include: ['*JarResources/Java/*.jar'])
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
…我有一个相当大的jar依赖项列表。当我尝试运行测试时,它在编译阶段失败,在编译阶段它找不到jar文件中的Java文件的符号。其中一些jar依赖项是打包的,其源代码位于相应的.class旁边。我尝试在源代码集中使用include过滤器,但没有效果

sourceSets {
    main {
        java {
            exclude 'com/mypkg/other/**'
        }
    }
    test {
        java {
            include 'com/mypkg/test/**'
        }
    }
}

我可以在IntelliJ 13中使用gradle aware make运行测试,没有问题(这里我右键单击单元测试并运行它们),因为它足够聪明,可以在不将文件传递给Javac的情况下构建依赖类路径,但不知怎的,同一build.gradle从命令行失败了。Gradle在Jar文件中找到依赖项时会自动将依赖项传递给javac,这是一个已知的问题吗?

您看到的是Java编译器的默认行为(源路径默认为类路径,源路径上的文件被编译)。一种解决方法是将源路径显式设置为“nothing”:


PS:并不是所有的工具/IDE都可以在Jar中处理源代码,所以通常最好将它们放在一个单独的源代码Jar中。

非常感谢!!!你用那小费救了我的命!不幸的是,我没有能力改变依赖项的结构。这是一种“我得到它时就是这样”的情景。我一段时间都不会从这件事中走出来的!
tasks.withType(JavaCompile) {
    options.compilerArgs += ["-sourcepath", "''"]
}