配置Jenkins构建任务:仅将指定类打包至War文件
多模块Maven项目Jenkins构建:仅打包指定模块的特定类子集
问题场景
我在给多模块Maven项目配置Jenkins构建任务,需要实现仅打包某一模块中的特定类子集(这些类是要独立部署的核心功能)。我已经在构建任务里加了这条命令:
clean package -Dmaven.test.skip=true -Dmaven.war.include=WEB-INF/classes/ch/irix/asco/business/bid/boundary/BidStackCreationResource.class,WEB-INF/classes/ch/irix/asco/business/bid/boundary/BidStackCreationResourceImpl.class,WEB-INF/classes/ch/irix/asco/business/biddingparameter/entity/BiddingParameterEntity.class,WEB-INF/classes/ch/irix/asco/business/bid/helper/InterpolationPoint.class,WEB-INF/classes/ch/irix/asco/business/bid/helper/InterpolationFunction.class,WEB-INF/classes/ch/irix/asco/business/resource/boundary/ResourceProductTimeSeriesBTO.class,WEB-INF/classes/ch/irix/asco/business/bid/entity/BidTsEntity.class,WEB-INF/classes/ch/irix/asco/business/bid/entity/BidTsEntityParameterEntity.class,WEB-INF/classes/ch/irix/asco/business/bid/control/BidCreationService.class,WEB-INF/classes/ch/irix/asco/business/bid/entity/BidEntity.class
但生成的War包还是包含了所有类,请问怎么实现需求?
问题根源
maven.war.include参数的作用是追加指定文件到War包,而非覆盖默认打包规则——默认情况下maven-war-plugin会把所有编译好的类都打包进去,所以你添加的参数只是额外包含了指定类,并不会剔除其他类。
正确实现步骤
1. 在目标模块的pom.xml里配置maven-war-plugin
直接在你要打包的模块的pom.xml中添加插件配置,先排除所有类,再精确指定要保留的类:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <!-- 建议使用最新稳定版,避免兼容性问题 --> <configuration> <!-- 先排除classes目录下所有类 --> <packagingExcludes>WEB-INF/classes/**/*.class</packagingExcludes> <!-- 再明确指定要包含的特定类 --> <packagingIncludes> WEB-INF/classes/ch/irix/asco/business/bid/boundary/BidStackCreationResource.class, WEB-INF/classes/ch/irix/asco/business/bid/boundary/BidStackCreationResourceImpl.class, WEB-INF/classes/ch/irix/asco/business/biddingparameter/entity/BiddingParameterEntity.class, WEB-INF/classes/ch/irix/asco/business/bid/helper/InterpolationPoint.class, WEB-INF/classes/ch/irix/asco/business/bid/helper/InterpolationFunction.class, WEB-INF/classes/ch/irix/asco/business/resource/boundary/ResourceProductTimeSeriesBTO.class, WEB-INF/classes/ch/irix/asco/business/bid/entity/BidTsEntity.class, WEB-INF/classes/ch/irix/asco/business/bid/entity/BidTsEntityParameterEntity.class, WEB-INF/classes/ch/irix/asco/business/bid/control/BidCreationService.class, WEB-INF/classes/ch/irix/asco/business/bid/entity/BidEntity.class </packagingIncludes> </configuration> </plugin> </plugins> </build>
2. 调整Jenkins的构建命令
打包规则已经在模块pom里配置完成,Jenkins命令可以简化为指定构建目标模块:
clean package -pl 你的目标模块名称 -am -Dmaven.test.skip=true
-pl:指定要构建的模块(比如你的模块叫bid-core-service,就写-pl bid-core-service)-am:自动构建该模块依赖的其他模块(如果目标模块依赖项目内其他模块,这个参数会确保依赖模块先完成构建)
3. 验证结果
构建完成后,解压生成的War包,检查WEB-INF/classes目录,应该只有你指定的那些类。
额外提醒
- 如果你的类依赖配置文件(比如
.properties、.xml),需要在packagingIncludes里追加对应的路径,比如WEB-INF/classes/*.properties - 不要在父pom里配置这个打包规则,仅在目标模块的pom中配置,避免影响其他模块的正常打包
- 确保maven-war-plugin版本不低于3.0.0,旧版本对
packagingExcludes和packagingIncludes的组合支持可能存在问题
内容的提问来源于stack exchange,提问作者xcrookedxedge
相关产品推荐
相关产品推荐

