java - Gradle 在 jar 文件中编译 .java ?

标签 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 依赖项列表。当我尝试运行测试时,它在编译阶段失败,无法找到隐藏在 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 在 Jar 文件中找到依赖项时自动将依赖项传递给 javac 的已知问题吗?

最佳答案

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

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

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

关于java - Gradle 在 jar 文件中编译 .java ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924108/

相关文章:

java - Maven 找不到 JavaFX

android - 关闭 React Native Android apk Release 上的调试菜单

android - 多个dex文件定义了Lcom/google/gdata/util/common/base/Escaper

java - 将 JScrollPane 滚动条移至右侧 SWING

java - 我的可执行 JavaFX 文件如何连接到 MySQL 数据库?

java - 程序无法作为Java Applet运行

java - Android:将网页的HTML读入字符串

java - 使用 MongoDB 驱动程序保存时出现异常

java - 在 Scala SBT 项目中导入 Accumulo 库

gradle - Homebrew 将不会安装任何东西,我也无法手动安装gradle