我有一个毕业项目。有一个根 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 中。