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

配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:49:59