我想知道目前VAADIN的7/8版本和tomcat 10之间是否存在兼容性问题。
发布于 2021-05-21 00:27:08
tl;dr
javax.*
包命名和jakarta.*
。对于Tomcat的竞争对手来说也是如此。示例:使用Jetty 10,而不是11。
jakarta.*
是的,有一个简单但很大的问题。
Vaadin仍然被编码到构建它的Java技术的javax.*
包命名中。这包括Servlet技术。
随着甲骨文将Java技术的责任转移到Eclipse基金会,这些技术的命名已经从Java转变为https://en.wikipedia.org/wiki/Jakarta_EE (Java™是Oracle的商标 )。作为转换的一部分,Jakarta技术中定义的接口和类的包名正在从javax.*
更改为jakarta.*
。
这个新的包名是一个为Java编写的几十年软件的突破性更改。虽然这是一个不幸的问题,但修复非常简单:在所有源文件的顶部重命名包行。
Jakarta项目正是在Jakarta的第9版中做到了这一点。大多数相关技术都增加了各自的版本号,但在其他方面与以前的版本基本相同(重命名其包是唯一的重大更改)。参见来自Eclipse,https://www.eclipse.org/community/eclipse_newsletter/2020/november/1.php的2020年通讯。
Tomcat项目现在运行两个并行版本:9和10。
javax.*
jakarta.*
两者同时正在发展;10并不比9“好”。
如果启动格林菲尔德项目,并且只使用更改包名的库,则可以选择使用Tomcat 10。
如果使用尚未更改包名的库,请使用Tomcat 9。Vaadin是一个仍然使用旧包名的库。
因此,就目前而言,您的Vaadin项目应该使用Tomcat的版本9而不是10运行。这里没有损失,因为Tomcat 9和10本质上是一样的。
目前还没有迫切需要进行javax.*
到jakarta.*
的过渡。最终,我预计我们将看到Vaadin向新包命名过渡的版本。在Vaadin阵营以及更广泛的Jakarta世界中,都有关于工具来帮助这种改变的讨论,尽管我不知道他们目前的状况。
当然,Tomcat的其他替代品/竞争对手也在经历同样的过渡痛苦。例如,Eclipse 11使用新包命名而Jetty 10是并行开发的,具有相同的特性集,正如WebTide在这个职位中所解释的那样。如果在Vaadin开发或部署中使用Jetty,则使用Jetty 10而不是11。
Servlet 3.1
今天(2021-05年)的所有版本都是基于Servlet3.1规范构建的,而不是Servlet 4或Servlet 5。请参阅文档页,https://tomcat.apache.org/whichversion.html获得Tomcat支持哪个Servlet规范的表。
因此,即使是Tomcat 9在这方面也没有必要。Tomcat8.5支持Servlet3.1,因此对于当前的Vaadin应用程序来说,它就足够了。FYI,Tomcat 8.5最初是从早期Tomcat 9中分叉而来的,并且包含了大多数相同的特性。
https://stackoverflow.com/questions/67628471
复制相似问题