由于最近在Jetty v9.4.51中引入了NullPointerException,我想看看如何切换到Spring Boot v2.7也支持的Jetty v10。Jetty v9在大约一年前就已经达到了EOL,即使在使用spring-boot-start - Jetty时,Jetty v9仍然是并且将继续保持默认值,也是时候了。
Spring Boot的文档确实包含了如何切换到Jetty v10的一节,但我缺乏关于这应该如何工作的幻想,而且我还没有设法获得依赖项解析以更改到v10。
我知道在Maven POM中集中版本属性并在实际依赖声明中引用属性的一般概念,如
<properties>
<jetty.version>10.0.14</jetty.version>
</properties>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>${jetty.version}</version>
</dependency>
我不知道是哪个魔法让Maven或Gradle用不同的属性集解析传递依赖,但没有在Spring Boot文档中给出的示例中明确引用jetty.version
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<!-- exclusions removed for sake of brevity -->
</dependency>
或者我实际上必须显式声明对Jetty v10的依赖独立于spring-boot-start - Jetty(我从文档中不理解)?然后,我不会仅仅排除与websocket相关的Jetty v9特定依赖项。
我还尝试使用ext
在类似情况下给出以下解决方案:
ext['jetty.version'] = '10.0.14'
dependencies {
implementation ('org.springframework.boot:spring-boot-starter-jetty:2.7.10') {
exclude group: 'org.eclipse.jetty.websocket', module: 'websocket-server'
exclude group: 'org.eclipse.jetty.websocket', module: 'javax-websocket-server-impl'
}
}
Jetty依赖项org.eclipse.jetty:jetty-servlets
和org.eclipse.jetty:jetty-webapp
继续被解析到v9.4.51.v20230217。我漏了哪一点?是否有一种方法可以轻松地将Spring Boot v2.7切换到Jetty v10,而无需显式声明对Jetty v10的依赖?这可能只在使用Spring的BOM(我们不是)时才有效吗?
这可能只在使用Spring的BOM(我们不是)时起作用吗?
是的。使用jetty.version
来覆盖Jetty的版本依赖于在Maven中使用spring-boot-starter-parent
或在Gradle中使用依赖管理插件。
如果你没有使用Spring Boot的依赖管理,你将不得不使用Maven或Gradle提供的标准机制来覆盖Jetty的版本。例如,使用Maven,您可以将Jetty的bom导入到项目的依赖项管理中,即pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<version>10.0.14</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>