关于 javax-to-jakarta-migration
用于将 Java 项目中的适用 `javax.*` 包迁移到 `jakarta.*` 的技能。它按步骤检查基线、更新依赖和源码并验证构建,同时区分不得更改的 JDK 包。
主要功能
- 01变更前检查构建基线
- 02识别需要迁移的包
- 03按目标运行时更新依赖
- 04修改源码与配置引用
- 05迁移后运行构建和测试
适用场景
- 01将项目迁移到 Tomcat 10 或 11
- 02执行其他技能委派的 Jakarta 命名空间迁移
- 03更新 Java 依赖和导入语句
- 04通过编译和测试验证迁移
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill javax-to-jakarta-migration安装后在 Claude Code 中输入/javax-to-jakarta-migration确认已加载。
详细介绍
javax → jakarta 迁移技能
适用场景
- 用户明确要求迁移到 jakarta 命名空间、Tomcat 10+/11 或 Jakarta EE
java-upgrade或spring-boot-4-migration委托执行命名空间迁移
仅检测到 javax.* 导入并不代表获准执行此迁移;应改为报告这些导入。
在 Spring Boot 项目中,Boot BOM 会管理 Jakarta 版本:不要固定以下版本,并由 Boot 版本决定 Jakarta EE 级别(Boot 4 = Jakarta EE 11,Servlet 6.1)。以下示例针对非 Boot 项目中的 Jakarta EE 10(Servlet 6.0、Tomcat 10.1+)。
流程
步骤 0 — 基线
先运行 ./mvnw verify 或 ./gradlew build 并记录结果;如果基线未通过,不要迁移。将更改放在单独的提交/步骤中。
步骤 1 — 扫描 javax 用法
在代码库中搜索所有需要迁移的 javax.* 导入:
javax.servlet.* → jakarta.servlet.*
javax.persistence.* → jakarta.persistence.*
javax.validation.* → jakarta.validation.*
javax.annotation.* → jakarta.annotation.*
javax.inject.* → jakarta.inject.*
javax.enterprise.* → jakarta.enterprise.*
javax.faces.* → jakarta.faces.*
javax.ws.rs.* → jakarta.ws.rs.*
javax.el.* → jakarta.el.*
javax.json.* → jakarta.json.*
javax.mail.* → jakarta.mail.*
javax.websocket.* → jakarta.websocket.*
不要迁移以下内容(它们仍属于 javax.*):
javax.sql.*— 属于 JDKjavax.naming.*— 属于 JDK(JNDI)javax.crypto.*— 属于 JDKjavax.net.*— 属于 JDKjavax.security.auth.*— 属于 JDKjavax.swing.*、javax.xml.parsers.*— JDK 包
步骤 2 — 更新 pom.xml
替换依赖坐标。选择与目标运行时匹配的 API 版本;下表针对 Jakarta EE 10(Tomcat 10.1+、Servlet 6.0):
| 目标运行时 | Jakarta EE | Servlet | Persistence | Validation | Annotations |
|---|---|---|---|---|---|
| Tomcat 10.0 | 9 | 5.0 | 3.0 | 3.0 | 2.0 |
| Tomcat 10.1 | 10 | 6.0 | 3.1 | 3.0 | 2.1 |
| Tomcat 11 | 11 | 6.1 | 3.2 | 3.1 | 3.0 |
| 旧版 | 新版 |
|---|---|
javax.servlet:javax.servlet-api | jakarta.servlet:jakarta.servlet-api:6.0.0 |
javax.persistence:javax.persistence-api | jakarta.persistence:jakarta.persistence-api:3.1.0 |
javax.validation:validation-api | jakarta.validation:jakarta.validation-api:3.0.2 |
javax.annotation:javax.annotation-api | jakarta.annotation:jakarta.annotation-api:2.1.1 |
步骤 3 — 更新 web.xml(如果存在)
version 必须与目标 Servlet 级别一致(Tomcat 10.0 为 5.0,Tomcat 10.1 为 6.0,Tomcat 11 为 6.1);以下示例适用于 Servlet 6.0:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="6.0">
步骤 4 — 更新 Java 源文件
仅将步骤 1 中识别出的 Jakarta EE javax. 导入替换为 .java 文件中对应的 jakarta. 导入;保留 JDK 包(例如 javax.sql、javax.crypto)不变。同时检查非 Java 引用:persistence.xml(javax.persistence.* 属性)、META-INF/services、beans.xml、属性文件/YAML、字符串类名和反射。
步骤 5 — 验证
- 运行
mvn clean compile或gradlew build— 修复所有编译错误 - 运行
mvn test或gradlew test— 确保所有测试通过 - 搜索剩余的
javax.*导入(排除 JDK 包)
上游资料(迁移前阅读)
获取目标版本对应的页面;如与本技能冲突,优先遵循上游资料。
- Jakarta EE 规范:https://jakarta.ee/specifications/
- Eclipse Transformer(二进制/字节码转换):https://github.com/eclipse-transformer/transformer
- OpenRewrite
org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta:https://docs.openrewrite.org/recipes/java/migrate/jakarta/javaxmigrationtojakarta - Tomcat 9 到 10 的迁移:https://tomcat.apache.org/migration-10.html
- Hibernate 迁移指南:https://hibernate.org/orm/documentation/migrate/
- Spring Boot 3 升级(Jakarta EE 9+ 基线):https://docs.spring.io/spring-boot/upgrading.html
输出
提供迁移摘要,列出所有已更改的文件、已替换的导入,以及任何所需的手动步骤。