You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle多模块项目中将WAR构件打包进EAR构件?

解决Gradle多模块项目中EAR打包引入指定WAR构件的问题

问题场景

Gradle多模块项目,子项目A生成a.ear,子项目B同时生成b.jar和b.war。当前A的依赖配置仅将b.jar打包进a.ear,但需求是把b.war打包进去。

解决方案

方法1:依赖声明中指定WAR构件

直接在子项目A的build.gradle里,修改deploy依赖,明确指定子项目B的war配置(WAR插件会自动创建这个配置):

plugins {
   id 'java-library'
   id 'ear'
}

dependencies {
   // 明确指定引用子项目B的war构件
   deploy project(path: ':B', configuration: 'war')
}

方法2:调整子项目B的构件优先级(可选)

如果希望子项目B被依赖时默认提供WAR构件,可以在B的build.gradle中修改默认构件:

plugins {
    id 'java-library'
    id 'war'
}

// 将war设为项目的默认构件
tasks.named('jar') {
    enabled = false // 可选:如果不需要生成jar的话
}

artifacts {
    archives tasks.war
}

这种方式下,子项目A原来的deploy project(':B')就能自动引入b.war,但会影响其他依赖B的模块(如果其他模块需要jar的话就不适用)。

原理说明

当直接依赖project(':B')时,Gradle默认会使用子项目的默认构件(由java-library插件提供的jar)。而WAR插件会额外创建一个war配置,对应生成的war文件,通过指定configuration: 'war'就能精准引入该构件。

内容的提问来源于stack exchange,提问作者Cristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:35:00