gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:45:11 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com