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

如何使用maven-war-plugin将指定类排除在Jar外但包含在War包中

解决方案

核心配置修改

你只需要在现有的maven-war-plugin配置中增加classesExcludes参数即可,该参数专门用于过滤attachClasses生成的classes jar包中的内容,且不会影响war包内的文件保留:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <warName>copyLib</warName>
        <attachClasses>true</attachClasses>
        <classesClassifier>classes</classesClassifier>
        <!-- 新增配置:仅从classes分类器的jar中排除主类,war包不受影响 -->
        <classesExcludes>
            <!-- 替换为你实际的A项目主类全路径,用/分隔包名,后缀为.class -->
            com/xxx/AApplication.class
            <!-- 如果主类包含内部类,可调整为通配符格式:com/xxx/AApplication*.class -->
        </classesExcludes>
        <packagingExcludes>
            WEB-INF/lib/tomcat-*.jar,
            WEB-INF/lib/jetty-*.jar,
            WEB-INF/lib/websocket-*.jar,
            WEB-INF/lib/jakarta.websocket*.jar,
            WEB-INF/lib/javax-websocket*.jar,
            WEB-INF/lib/snakeyaml*.jar
        </packagingExcludes>
    </configuration>
</plugin>

相关说明

  • classesExcludes是maven-war-plugin针对附加classes jar包的专用过滤配置,规则只作用于生成的xxx-classes.jar,war包的WEB-INF/classes下仍会保留你排除的主类文件,完全符合需求。
  • 之前使用@Profile无效的原因是该注解是运行期生效的条件注解,打包阶段不会主动过滤类文件,主类仍然会被打进jar包中,只是运行时不触发初始化逻辑而已。

验证方式

打包完成后执行以下命令校验结果:

  1. 检查classes jar包是否已排除主类:jar tf xxx-classes.jar | grep AApplication,无输出说明已排除
  2. 检查war包是否保留主类:jar tf xxx.war | grep AApplication,有输出说明保留成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:45:03