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

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

Common

  • 通过ShadowJar输出包含所有jar依赖项的JAR文件

  • 只有来自Maven中央存储库的依赖项,没有其他依赖项

Application

  • 输出WAR文件

  • 将Common的shadowJar作为依赖项 .

  • 具有Maven中央存储库的其他依赖项

What I want to achieve

当我在应用程序上运行gradle war时,我'd like to create a jar with all Maven dependencies in it, as well as Common project'的ShadowJar .

问题在于ShadowJar部分 . 在Application上执行gradle war时,Common中没有构建工件 . 我想把shadowJar建成并加入战争 .

Current solution 我将此添加到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包含在Application的WAR中 .

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