我无法在gradle 4.2 build中删除警告:
Gradle now uses separate output directories for each JVM language, but this build assumes a single directory for all classes from a source set. This behaviour has been deprecated and is scheduled to be removed in Gradle 5.0
at build_d02ctf5wwx94ec3duxv44z2cn$_run_closure3$_closure6.doCall(...\build.gradle:56)
项目构建EJB jar,因此beans.xml文件必须最终出现在classes输出文件夹中。 我发现的建议修复是替换警告中提到的行:
sourceSets {
main {
output.resourcesDir = java.outputDir
}
test {
output.resourcesDir = java.outputDir
}
}
为:
sourceSets {
main {
output.resourcesDir = new File(buildDir, "classes/java/main")
}
test {
output.resourcesDir = new File(buildDir, "classes/java/main")
}
}
这解决了警告,beans.xml就是它需要的地方。我无法弄清楚的问题是,构建中还有另一个项目依赖于ejb项目并运行测试。使用第二种方法似乎不能识别beans.xml文件(测试中的焊接注入不起作用)
项目结构:
build.gradle
/ejb-project (builds ejb's and copies beans.xml)
/it-test-project (uses Services from ejb)
/st-test-project
/war-project
/ear-project
it-test-project 包含project()依赖项和此sourceSets:
dependencies {
testCompile project(':ejb-project')
testRuntime project(':ejb-project')
}
sourceSets {
test {
// output.resourcesDir = new File(buildDir, "classes/java/main")
output.resourcesDir = output.classesDir
}
}
我不明白测试中的注射是如何在上面的变体中起作用的,但是一旦我切换到注释的那个没有。我假设它与文件引用和依赖关系有关,但我不明白这里的选项是什么。
任何建议都会很棒:)
答案 0 :(得分:0)
因此。经过一番挖掘后,我可以通过做两件事来摆脱警告信息:
睁开眼睛:由于缺少beans.xml文件而导致测试失败,该文件不在java / main中,而是在测试文件夹中。因此上面的注释行不起作用,beans.xml不存在。因此,请确保您引用正确的文件夹实际上是我的解决方案。
将resourcesDir添加/更改为测试文件夹。
此代码段不会导致警告:
sourceSets {
test {
output.resourcesDir = new File(buildDir, "classes/java/test")
}
}
不确定这是否是执行此操作的最佳方式,因为这意味着java源集文件夹。以某种方式正确引用它们会很好 - 但是因为我知道它的'java' - 我可以忍受这个解决方案。