You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在打包WAR时排除依赖包中的指定类库?

解决WAR打包时排除特定传递依赖的问题

嘿,这个场景我太熟悉了!传递依赖里带的servlet包确实会和应用服务器自带的冲突,完全不用把整个mtwilson-client排除掉,咱们可以精准地移除那些惹麻烦的servlet相关依赖,分两步来操作:

1. 从依赖树层面排除目标传递依赖

直接在你的mtwilson-client依赖配置里加上<exclusions>标签,把它引入的servlet类库排除掉。不过要先搞清楚具体的依赖坐标,你可以用mvn dependency:tree命令打印完整的依赖树,找到mtwilson-client下面的servlet相关依赖对应的groupIdartifactId,然后像这样配置:

<dependency>
    <groupId>com.intel.mtwilson</groupId>
    <artifactId>mtwilson-client</artifactId>
    <version>2.0.3</version>
    <exclusions>
        <!-- 替换成你实际查到的servlet依赖坐标 -->
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </exclusion>
        <!-- 如果还有其他相关的servlet包,比如旧版的servlet-api,也一并排除 -->
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

这个方法从依赖引入的源头就把不需要的包排除了,是最根本的解决方式。

2. 用WAR打包插件兜底,确保彻底移除

如果你担心还有遗漏,或者想在打包环节再做一层保障,可以配置maven-war-plugin,直接指定打包时要过滤的JAR包:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <packagingExcludes>
                    WEB-INF/lib/javax.servlet-api-*.jar,
                    WEB-INF/lib/servlet-api-*.jar
                </packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

这样就算有漏网的servlet JAR,也会在打包WAR的时候被过滤掉。

最后提醒下,mvn dependency:tree真的是排查依赖冲突的神器,一定要用它确认所有需要排除的目标依赖,避免白费功夫~

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

火山引擎 最新活动