我正在升级我的JEE应用程序中的一些库,希望解决一个奇怪的问题(参见JAX-RS联调与Undertow在Jenkins中失败,但在本地工作)
在升级restEasy和Weld时,我的测试失败了,因为由于命名空间从javax. servlet.ServletContext
更改为jakarta.servlet.ServletContext
,因此存在一些“内部”编译问题:
在我的依赖项中,我有:
在焊接-servlet-core4.0.2.Final:
package org.jboss.weld.environment.undertow;
import io.undertow.servlet.ServletExtension;
import jakarta.servlet.ServletContext;
...
public class WeldServletExtension implements ServletExtension {
@Override
public void handleDeployment(DeploymentInfo deploymentInfo, ServletContext servletContext) {
...
}
}
在undertow-servlet2.2.7.Final:
package io.undertow.servlet;
import io.undertow.servlet.api.DeploymentInfo;
import javax.servlet.ServletContext;
public interface ServletExtension {
void handleDeployment(final DeploymentInfo deploymentInfo, final ServletContext servletContext);
}
这是行不通的,因为WeldServletExency实际上并没有在该设置中实现ServletExency:它使用jakarta. servlet.ServletContext
,而接口需要使用javax.servlet.ServletContext
undertow-servlet:2.2.7.Final
由resteasi-undertow: 5.0.0.Beta1
传递(最新版本,从2021年10月开始),我添加了自己weld-servlet-core:4.0.2.Final
(也是最新版本:从2021年7月开始)
查看其主分支中的ServletExency,Undertow仍然使用javax。*
命名空间,而不是jakarta。*
-它自2014年以来就没有更新过。所以即使我使用Undertow最新版本(2.2.12.Final),我仍然会有这个问题
所以我有点困惑…这里有什么诀窍?一旦我们升级到RestEasy 5. x并使用Weld,我们就不能使用Undertow吗?
Undertow正在发布一个特殊的单独工件,它使用EE9个命名空间。它有一个稍微不同的GAV-io. undertow:undertow-servlet-jakartaee9:2.2.12.Final
正如你在这里看到的,它在Maven Central中可用。焊接4实际上正在使用这个工件,这可以从pom. xml中看到。
这应该是你拼图中缺少的部分。