Jakarta ee Gradle shadowJar编译依赖项

Jakarta ee Gradle shadowJar编译依赖项,jakarta-ee,gradle,build.gradle,shadowjar,Jakarta Ee,Gradle,Build.gradle,Shadowjar,我有一个gradle项目。有一个根Gradle文件夹,其中包含两个子项目-common和application | -common/ -build-gradle | -application/ | -build.gradle |build.gradle |settings.gradle 普通 通过ShadowJar输出包含所有JAR依赖项的JAR文件 只有来自Maven中央存储库的依赖项,没有其他依赖项 应用程序 输出WAR文件 将

我有一个gradle项目。有一个根Gradle文件夹,其中包含两个子项目-common和application

| -common/
               -build-gradle
| -application/
|              -build.gradle
|build.gradle
|settings.gradle
普通

  • 通过ShadowJar输出包含所有JAR依赖项的JAR文件
  • 只有来自Maven中央存储库的依赖项,没有其他依赖项
应用程序

  • 输出WAR文件
  • 将Common的shadowJar作为依赖项
  • 具有来自Maven中央存储库的其他依赖项
我想要实现的目标

当我在应用程序上运行gradlewar时,我想创建一个包含所有Maven依赖项的jar,以及公共项目的ShadowJar

问题在于ShadowJar部分。当gradle war在应用程序上执行时,并没有构建公共工件。我想让暗影魔王加入战争

当前解决方案 我将此添加到root的build.gradle中

subprojects{
    tasks.jar.enabled = false
    artifacts{
        shadowJar
    }
    build.dependsOn(shadowJar);
}
在Application/build.gradle中,我还有一行

compile files('../common/build/libs/common.jar')
然后我在根上运行构建任务。不知何故,首先构建公共项目,然后将ShadowJar包含在应用程序的WAR中


这远远不是最优的。我希望将应用程序对Common的依赖性定义为compileproject(“:Common”),而不是指向固定的文件名。然而,“compile project”语句显然不会在公共模块中生成shadowJar,也不会在WAR-in-Application模块中包含它。

为什么不直接构建应用程序的WAR文件而不使用shadowJar呢?Gradle将把公共子项目作为一个小jar及其所有依赖项放入libs中。您将
common
子项目作为war库中的胖罐子的动机是什么?