昨天折腾了一天,把旧项目升级了
旧项目运行环境
jdk :jdk1.7
TomCat:TomCat8.0 或者 TomCat 8.5
Eclipse 2022-12
spring:spring-2.5.6.jar
Hibernate:hibernate-3.2.6.ga.jar
Struts:struts2-core-2.1.6.jar
升级后运行环境
jdk :jdk1.8
TomCat:TomCat9.0 TomCat的jdk也是1.8
Eclipse 2022-12
spring:Spring4.3.13
Hibernate:hibernate-core-4.1.12.Final.jar
Struts:struts2.5.32
由于jdk1.8还是Java EE项目,还不是很满足,今天决定继续折腾,把项目升级为Jakarta试试。
整个项目已经备份了,不怕坏。
【Jakarta的由来】
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。它分为三个版本:
Java SE(J2SE):标准版。基础中的基础,后面2个版本都依赖于它。当前最新版本是Java 17(LTS版本,将于2021年9月发布)
Java EE(J2EE):企业版。用于企业级大型应用开发,包含了Web、Security、Management等几十种标准技术
Java ME(J2ME):移动版。随着Android/iOS的流行,它已几乎销声匿迹
Oracle将 Java EE (Java SE还自己保留)交给开源组织,Eclipse基金会接手。但Oracle不允许开源组织使用Java名号,所以Jakarta EE名称于2018.02.26应运而生
由于我电脑本身就安装了jdk17,所有直接换jdk17了
更换后源代码会出现很多红色标线
【处理问题1】
import javax.annotation.Resource; 很多类文件的这句标红
Java为我们提供了 javax.annotation.Resource这个注解。
spring框架提供了org.springframework.beans.factory.annotation.Autowired。
一般情况下我们使用 javax.annotation.Resource这个注解,因为这样我们就能实现和spring框架的解藕。
原文链接:https://blog.csdn.net/weixin_39797780/article/details/114972302
这时意识到一个问题
【jdk 和 java ee 和 jakarta ee 到底有什么区别啊】
Java EE是Java企业版,是面向企业级应用开发而设计的Java平台。
JDK则是Java开发工具包,包含了开发和运行Java程序所需的所有组件。
Java EE和JDK之间有许多共同点。Java EE是建立在JDK之上的,也就是说,Java EE中使用的所有Java API都位于JDK中。既然Java EE是基于JDK的,那么JDK的版本肯定会影响Java EE的应用开发。
另外,Java EE中的一些新特性只能在较新的JDK版本中使用。比如,Java EE 7中引入了Lambdas表达式,这是在JDK 8中才被引入的新语言特性。因此,在使用Java EE 7时,必须使用JDK 8或更高版本。
jdk,jre,jvm的区别可见https://blog.csdn.net/Martin_chen2/article/details/112905578
【搞清关系后,我需要下载一个Jakarta ee】
https://blog.csdn.net/yuanhong55/article/details/133868639?spm=1001.2014.3001.5502
研究了好久,找到这篇文章
https://blog.csdn.net/xiaofanku/article/details/112618281
升级jakarta并不是简单的把java ee替换成jakarta;还要看以下两点条件
1、服务器是否支持jakarta
目前有多个服务器已适配jakarta,tomcat 10支持jakarta;所以服务器没啥问题;
2、框架类是否支持jakarta
头晕,不搞了,恢复用java ee
【2023-10-16】
由于之前研究这么久,没转换成功,还是不甘心,继续搞,加油,加油,加油!!!
【首先解决import javax.annotation.Resource;的错误】
我下载了一个jakarta.annotation-api-2.1.1.jar,加人到项目里。
然后search—》file-》replace
把import javax.annotation.Resource;全部替换成import jakarta.annotation.Resource; 所有的红色错误解决了。
【还有一个红色XX】
点Markers可以看到具体的错误
英文不是很懂,大概是说Java编译器级别太低,与java项目不匹配。
我现在用的是eclipse 2022-12 ,于是我下载一个最新的eclipse 2023-9,跟换完之后还是有。最后在项目属性里面改了这个为java17,就可以了
改完之后项目完全没错了,部属到tomcat 10试试,因为tomcat10才支持jakarta
运行后出现以下错误
【错误1】
严重: 启动过滤器异常[struts2]
java.lang.ClassCastException: class org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter cannot be cast to class jakarta.servlet.Filter (org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @686449f9; jakarta.servlet.Filter is in unnamed module of loader java.net.URLClassLoader @3ac3fd8b)
struts2的过滤器
这个错误表明struts2它不支持Tomcat 10。“问题”在于Tomcat 10切换到了Jakarta EE 9规范,Jakarta EE 9从javax.*包名称空间切换到了jakarta.*包名称空间。
根据version notes,Struts2 6.0.0 GA是Servlet 3.1(Java EE 7),它使用javax.*命名空间,这意味着它通常兼容JavaEE 7和8以及Jakarta EE 8,但不兼容Jakarta EE 9和更高版本,这意味着您需要使用Tomcat 9。
根据WW-5141 Jakarta EE 9(或更高版本),Struts2 7.0.0中 * 计划 * 提供支持。
参考:https://www.saoniuhuo.com/question/detail-2545768.html
struts2下载地址:https://struts.apache.org/download.cgi
struts2最新版是 6.0.0.1,更新内容https://cwiki.apache.org/confluence/display/WW/Version+Notes+6.0.0
何时支持Jakarta,要7.0.0版本https://issues.apache.org/jira/browse/WW-5141