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 ... 不起作用(无法从依赖项中排除组)
放心 IntelliJ IDEA 中的 3.0.3 maven 依赖项不起作用
来自maven依赖项的spring boot RestController不起作用