【问题标题】:Gradle compiling .java inside jar files?Gradle在jar文件中编译.java?
【发布时间】:2014-09-18 23:35:59
【问题描述】:

我遇到了一个奇怪的场景,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/**'
        }
    }
}

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

【问题讨论】:

    标签: java intellij-idea gradle


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢!!!你用那个小费救了我的培根!不幸的是,我没有能力改变依赖的结构。这是“我得到它的时候就是这样”的场景之一。我有一阵子找不到出路了!
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2015-05-27
    • 2022-01-03
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多