Oracle 决定将 Java EE 捐赠给 Eclipse 基金会后,更名为 Jakarta EE。
这样,
javax
命名空间更改为jakarta
。
为了避免从 Java EE 更改为 Jakarta EE 带来的兼容性问题,需要注意什么?
您不能同时使用 Java EE 和 Jakarta EE。您必须使用其中之一。
如果项目使用 Java EE,则项目中不应存在任何 Jakarta EE 依赖项。
以下是 Java EE/Jakarta 依赖项的一些示例(采用
group.id:artifact-id
表示法):
Java EE 依赖 | Jakarta EE 依赖 |
---|---|
|
|
|
|
|
|
|
|
|
|
您不应在同一个项目中同时拥有
javax
和 jakarta
依赖项。
您可以使用
mvn dependency:list
(与 Maven 一起使用)或 gradlew dependencies
(与 Gradle 一起使用)来检查依赖关系。
您的项目可能使用为 Java EE 或 Jakarta EE 编写的依赖项。
您需要确保您使用的这些依赖项的版本与您正在使用的规范相匹配。
此表提供了在某些版本中使用 Java EE 和在其他版本中使用 Jakarta EE 的依赖项示例:
依赖性 | 支持 Java EE 的版本 | 支持 Jakarta EE 的版本 |
---|---|---|
春季启动 | <= 2.x | >= 3.x |
春天 | <= 5.x | >= 6.x |
休眠 | <= 5.x | >= 6.x |
随着名称
Java EE
更改为 Jakarta EE
,所有 Java EE 类型都从 javax
包移至 jakarta
(例如,javax.servlet
更改为 jakarta.servlet
)。
如果项目使用 Java EE,则不应包含任何
jakarta.*
导入,如果使用 Jakarta EE,则不应使用 javax.*
中的任何 Java EE 类。
有一些工具可用于更改项目中的所有导入和其他类型引用。
某些配置文件(例如
persistence.xml
)可能会有所不同,具体取决于使用的是 Java EE 还是 Jakarta。
如果配置文件引用以
javax
开头的内容,则这通常属于 Java EE,而以 jakarta
开头的引用通常属于 Jakarta EE 项目。
这是 Java EE 和 Jakarta EE 的示例
persistence.xml
文件:
<!-- This is for Java EE -->
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="MyPersistenceUnit" transaction-type="JTA">
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:my-database-url" />
</properties>
</persistence-unit>
</persistence>
<!-- This is for Jakarta EE -->
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
version="3.0">
<persistence-unit name="MyPersistenceUnit" transaction-type="JTA">
<properties>
<property name="jakarta.persistence.jdbc.url" value="jdbc:my-database-url" />
</properties>
</persistence-unit>
</persistence>
其他配置文件可能需要类似的更改。
Java EE 项目应部署到支持 Java EE 的应用程序服务器/Web 容器,Jakarta EE 项目应部署到支持 Jakarta EE 的应用程序服务器/Web 容器。
例如,Tomcat <=9 uses Java EE while Tomcat >=10 使用 Jakarta EE
如果项目引用不可用的类,则可能会发生
ClassNotFoundException
s/NoClassDefFoundError
s。
容器可能由于以下原因找不到某些元素(例如 servlet):容器扫描
javax.servlet.annotation.WebServlet
但 servlet 被注释为 jakarta.servlet.annotation.WebServlet
。
应用程序可能无法正确获取某些配置。
当然,可能还会有很多其他问题,具体取决于到底做错了什么。