Tomcat的Maven依赖排除不起作用

Posted

技术标签:

【中文标题】Tomcat的Maven依赖排除不起作用【英文标题】:Maven dependency exclusion of Tomcat doesn't work 【发布时间】:2019-11-13 01:55:54 【问题描述】:

我创建了一个基于 maven 的 spring-boot-project 来探索如何让它在 Websphere Application Server 上运行。 这是我需要排除spring-boot-starter-web的嵌入式Tomcat的方式。

我尝试了以下方法:

为 spring-boot-starter-tomcat 添加了一个新的依赖项,其范围为:provided(参见Removing embedded tomcat server from war file when deploying to JBOSS [Spring-Boot]),后跟一个 mvn clean 更新。

使用 spring-boot-starter-web 依赖项中的 excludes-tag 来排除 spring-boot-starter-tomcat(参见 https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html),然后进行 mvn clean 更新。

这些都不起作用。

这是我的“原生”POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.6.RELEASE</version>
      <relativePath/>
    </parent>
    <packaging>war</packaging>
    <properties>
      <java.version>1.8</java.version>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      ...
    </dependencies>
    <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
      </plugins>
    </build>
</project>

这是我对显式 Tomcat 的依赖(范围:提供):

<project ...>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
      </dependency>
    </dependencies>
</project>

这是我对排除项的依赖:

<project ...>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
          <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring‑boot‑starter‑tomcat</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
    </dependencies>
</project>

这是 mvn dependency:tree: 的输出:

https://imgur.com/a/VUkYCLm (抱歉我这里不知道怎么上传图片。)

我希望 Tomcat 从我的 maven 依赖项中删除。

提前致谢。

【问题讨论】:

请更具体地说明什么不起作用。对于初学者,我看不到您正在构建 WAR 的任何地方,因此您可能会得到一个 JAR,并且根本无法将其部署到 websphere。你也没有定义你是如何构建你的工件的。 其实我有,但我虽然不需要提供,但我会在几分钟内编辑它。 【参考方案1】:

当我构建它时,运行您发布的排除示例运行良好。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

此外,我在添加此排除项后进行了 mvn clean install,并且我的依赖关系树也不再包含 tomcat jar:

添加排除项后您是否进行了 mvn clean install ?

【讨论】:

以上是关于Tomcat的Maven依赖排除不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - Gradle 实现 (...) exclude ... 不起作用(无法从依赖项中排除组)

如何在maven中找到依赖项,依赖项:树不起作用

放心 IntelliJ IDEA 中的 3.0.3 maven 依赖项不起作用

来自maven依赖项的spring boot RestController不起作用

依赖注入在使用 Jersey 和 OpenWebBeans 的 Tomcat 7 上不起作用

Maven添加dependency依赖后失效/不起作用