我将Sping Boot 与Jetty一起使用,似乎无法在Gradle构建文件中排除所有Tomcat依赖项。
构建gradle的相关部分:
compile("org.springframework.boot:spring-boot-starter") {
exclude module: "tomcat-embed-el"
}
compile("org.springframework.boot:spring-boot-starter-jetty")
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"
}
然而,当我运行gradle dependencies
时,tomcat的某些部分仍然存在,并导致WebSockets出现问题:
...
|
+--- org.springframework.boot:spring-boot-starter-web: -> 1.4.1.RELEASE
| +--- org.springframework.boot:spring-boot-starter:1.4.1.RELEASE (*)
| +--- org.hibernate:hibernate-validator:5.2.4.Final
| | +--- javax.validation:validation-api:1.1.0.Final
| | +--- org.jboss.logging:jboss-logging:3.2.1.Final -> 3.3.0.Final
| | \--- com.fasterxml:classmate:1.1.0 -> 1.3.1
| +--- com.fasterxml.jackson.core:jackson-databind:2.8.3
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.8.0 -> 2.8.3
| | \--- com.fasterxml.jackson.core:jackson-core:2.8.3
| +--- org.springframework:spring-web:4.3.3.RELEASE
| | +--- org.springframework:spring-aop:4.3.3.RELEASE (*)
| | +--- org.springframework:spring-beans:4.3.3.RELEASE (*)
| | +--- org.springframework:spring-context:4.3.3.RELEASE (*)
| | \--- org.springframework:spring-core:4.3.3.RELEASE
| +--- org.springframework:spring-webmvc:4.3.3.RELEASE
| | +--- org.springframework:spring-aop:4.3.3.RELEASE (*)
| | +--- org.springframework:spring-beans:4.3.3.RELEASE (*)
| | +--- org.springframework:spring-context:4.3.3.RELEASE (*)
| | +--- org.springframework:spring-core:4.3.3.RELEASE
| | +--- org.springframework:spring-expression:4.3.3.RELEASE (*)
| | \--- org.springframework:spring-web:4.3.3.RELEASE (*)
| \--- org.springframework.boot:spring-boot-starter-tomcat:1.4.1.RELEASE
| +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.5
| +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.5
| \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.5
| \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.5
...
为什么spring-boot-starter-tomcat
不排除在spring-boot-starter-web
之外?
6条答案
按热度按时间u5i3ibmn1#
啊哈,找到原因了。
我还有
compile("org.springframework.boot:spring-boot-starter-websocket")
依赖项,它也依赖于spring-boot-starter-tomcat
。Gradle依赖项输出误导我认为spring-boot-starter-web
是Tomcat仍然存在的原因。我不得不补充以下内容:
经验教训是,当您想要排除某个依赖项时,请仔细检查所有依赖项,以确保它被排除在所有位置之外。而且,Gradle依赖项输出可以进行改进,以减少误导性。
gk7wooem2#
我遇到了同样的问题,因此除了排除spring-boot-starter-tomcat之外,我还必须排除tomcat-embed-*jar,我是通过gradle配置完成此操作的
7rfyedvj3#
gradle
在Gradle 6中,这对我来说是有效的,没有上面提到的模块排除:
插件配置
spring boot gradle plugin documentation 4.2.1建议如下声明所提供的依赖关系(假设您构建了一个war):
依赖关系不会从战争中移除,而是移动到一个通常不会造成伤害的地方。
dfty9e194#
使用KotlinGradle DSL:
e5nqia275#
Krešimir Nesek的回答启发了我去解决我的bug。但是我解决它的方式有点不同。
我的问题是通过在Kotlin中的WebFlux和springCoroutines上构建的模块中包含其他带有Spring-Boot的模块来引发的。
我在Kotlin的方式是:
第一个参数
"org.springframework.boot"
用于组,第二个参数用于特定模块。nc1teljy6#
依赖项的完整示例(KotlinDSL):