java - 升级到 gradle 4.x 后 - 无法解决 JEE 项目的警告

标签 java jakarta-ee gradle gradle-dependencies source-sets

我无法摆脱 gradle 4.2 版本中的警告:

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 文件(测试中的焊接注入(inject)不起作用)

项目结构:
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
  }
}

我不明白测试中的注入(inject)在上面的变体中是如何工作的,但是一旦我切换到注释的那个就不行了。我认为它与文件引用和依赖项有关,但我不明白这里的正确选项是什么。

任何建议都会很棒:)

最佳答案

所以。经过一番挖掘,我可以通过做两件事来摆脱警告信息:

  • 打开我的眼睛:测试失败是因为缺少 beans.xml 文件,该文件不在 java/main 中,而是在测试文件夹中。因此上面的注释行不起作用,beans.xml 不存在。因此,请确保您引用正确的文件夹实际上是我的解决方案。
  • 将 resourcesDir 添加/更改到测试文件夹。

  • 此代码段不会导致警告:
    sourceSets {
        test {
             output.resourcesDir = new File(buildDir, "classes/java/test")
        }
    }
    

    不确定这是否是最好的方法,因为这意味着 java 源集文件夹。以某种方式正确引用它们会很好 - 但因为我知道它的'java' - 我可以接受这个解决方案。

    关于java - 升级到 gradle 4.x 后 - 无法解决 JEE 项目的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46454184/

    相关文章:

    java - Maven 没有使用本地仓库

    android - 如何为 React Native 定义全局 gradle 路径

    java - Java 中的反转位 - O(n)

    java - 从 C++ 导出到 Eclipse 作为 Java 程序

    java - 重复选择或使用 IN 子句,哪个更快?

    java - LibGDX - 多台机器上的库

    android - 无法查询属性 'packageName' 的值。 list 文件不存在 :

    java - Android - 在所有 Activity 中设置 ActionBar 颜色?

    java - AccessibleObject 类的 setAccessible 方法背后有一个 boolean 参数的原因是什么?

    java - 在运行时从 WSDL 动态调用 Web 服务