我想知道当前版本7/8的VAADIN和tomcat 10 之间是否存在任何兼容性问题
tl;dr
- Tomcat 9和10本质上是相同的。
- 唯一的区别是
javax.*
包的命名与jakarta.*
包的命名不同
- 唯一的区别是
- 目前,对于Vaadin,使用Tomcat 9,而不是10
Tomcat的竞争对手也是如此。示例:使用Jetty 10,而不是11。
jakarta.*
是的,有一个简单但很大的问题。
Vaadin仍然按照其构建所基于的Java EE技术的javax.*
包命名进行编码。这包括Servlet技术。
随着Oracle将Java EE技术的责任转移到Eclipse基金会,这些技术的命名已从Java EE更改为Jakarta EEava™是Oracle的商标(。作为转换的一部分,Jakarta EE技术中定义的接口和类的包名称正在从javax.*
更改为jakarta.*
。
对于几十年来为Java EE编写的软件来说,这个新的包名称是一个突破性的更改。虽然这是一个不幸的问题,但修复方法非常简单:重命名所有源文件顶部的包行
雅加达EE项目在雅加达EE的第9版中做到了这一点。大多数相关技术都增加了各自的版本号,但在其他方面与以前的版本基本相同(重命名包是唯一的重大变化(。请参阅Eclipse基金会2020年的时事通讯,了解雅加达EE 9。
Tomcat项目现在运行两个并行版本:9和10。
- Tomcat 9使用旧的包命名:
javax.*
- Tomcat10使用新的包命名:
jakarta.*
两者都在同时开发中;10并不比9"好"。
如果正在启动一个绿地项目,并且您只使用更改了包名称的库,那么您可以选择使用Tomcat10。
如果使用的库尚未更改包名称,请使用Tomcat9。Vaadin就是这样一个仍然使用旧包名称的库。
➥因此,目前,您的Vaadin项目应该使用Tomcat的9版本运行,而不是使用10版本。这里没有损失,因为Tomcat 9和10本质上是相同的。
目前还没有迫切需要使javax.*
向jakarta.*
过渡。最终,我预计我们将看到Vaadin的发布过渡到新的包命名。瓦丁阵营和更广泛的雅加达EE世界都有关于帮助实现这一变革的工具的讨论,尽管我不知道他们目前的状况。
当然,Tomcat的其他替代品/竞争对手也在经历同样的转型阵痛。例如,Eclipse Jetty 11使用了新的包命名,而Jetty 10正在使用相同的特性集进行并行开发,正如WebTide在本文中所解释的那样。如果使用Jetty进行Vaadin的开发或部署,那么您将使用Jetty 10而不是11。
Servlet 3.1
今天(2021-05(的Vaadin的所有版本都是根据Servlet 3.1规范构建的,而不是Servlet 4或Servlet 5。有关Tomcat支持哪个Servlet规范的表,请参阅文档页Apache Tomcat Versions。
因此,在这方面甚至不需要Tomcat9。Tomcat 8.5支持Servlet 3.1,因此对于当前的Vaadin应用程序来说已经足够了。仅供参考,Tomcat8.5最初是从早期的Tomcat9派生而来的,并且包含大部分相同的功能。