提问者:小点点

jakarta/javax命名空间下的Weld和Undertow


我正在升级我的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.Finalresteasi-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吗?


共1个答案

匿名用户

Undertow正在发布一个特殊的单独工件,它使用EE9个命名空间。它有一个稍微不同的GAV-io. undertow:undertow-servlet-jakartaee9:2.2.12.Final

正如你在这里看到的,它在Maven Central中可用。焊接4实际上正在使用这个工件,这可以从pom. xml中看到。

这应该是你拼图中缺少的部分。