4

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

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

常见的

  • 通过 ShadowJar 输出包含所有 jar 依赖项的 JAR 文件
  • 仅具有来自 Maven 中央存储库的依赖项,没有其他依赖项

应用

  • 输出 WAR 文件
  • 具有 Common 的 shadowJar 作为依赖项。
  • 具有来自 Maven 中央存储库的其他依赖项

我想要达到的目标

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

问题出在 ShadowJar 部分。在Application 上执行gradle war时,Common 中没有构建工件。我想建立 shadowJar 并将其包含在战争中。

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

subprojects{
    tasks.jar.enabled = false
    artifacts{
        shadowJar
    }
    build.dependsOn(shadowJar);
}

在 Application/build.gradle 中,我还有一行

compile files('../common/build/libs/common.jar')

然后我在 root 上运行构建任务。不知何故,首先构建了公共项目,并将 ShadowJar 包含在应用程序的 WAR 中。

这远非最佳。我希望将 Application 对 Common 的依赖定义为 compile project(':common') 而不是指向固定的文件名。但是,“编译项目”语句显然不会在 Common 模块中生成 shadowJar,并且不会将其包含在 Application 模块中的 WAR 中。

4

0 回答 0