写给使用Tomcat 10遇到问题的同学,以及因为遇到问题而降级到Tomcat 9的同学。
我就是前者,我在重写SpringMVC Controller接口的时候,发现人家方法参数传参都是javax.*包下的,我这种导入jakarta.*包根本用不了,情况就是这样:
【原因】:因为2017年Oracle公司把JavaEE移交给了开源组织,并且要求开源组织不再使用Java这个名字,所以Eclipse基金会将其更名为Jakarta EE (雅加达)。所以我们要知道三件事,一是javax.*包和jakarta.*包只是命名空间更改了,二是不止Tomcat,其他开源库Jetty,Undertow等也遇到了这样的问题,而且该情况不会因为你版本降级了缓解,他会持续存在,三是spring 5版本没办法支持jakarta.*,想调用API传参都没法传,不能用就是不能用。
【发展】:spring开发者意识到这个问题,也规划了在spring 6版本支持jakarta EE,毕竟那么多开源项目等着用不是。2021年9月就有了要支持jakarta的消息,发布正式的支持的时间是2022年的Q4。但是这是不是说当下该问题没救了呢。不是的,当前我们就有了spring 6的SNAPSHOT版本,虽然还是快照版本,在持续迭代,但是已经能够支持Jakarta了。
【解决方法】:
第一步:在pom.xml文件中导入资源:
<repositories>
<repository>
<id>repository.spring.snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
第二步:导入springMVC 6.0.0的依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.0.0-SNAPSHOT</version>
</dependency>
之后Tomcat的所有版本,都不会再支持javax.*而只能支持jakarta.*了,咱们也不能一遇到问题就版本降级,还是要积极拥抱新技术不是…