繁体   English   中英

Gradle在jar文件中编译.java?

[英]Gradle compiling .java inside jar files?

我遇到一个奇怪的情况,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编译器的默认行为(源路径默认为类路径,源路径上的文件将被编译)。 一种解决方法是将源路径显式设置为“ nothing”:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM