mcpField
J
javax-to-jakarta-migration

javax-to-jakarta-migration

github.com/github开发40.5k100 次安装1 天前更新
代码仓库

关于 javax-to-jakarta-migration

用于将 Java 项目中的适用 `javax.*` 包迁移到 `jakarta.*` 的技能。它按步骤检查基线、更新依赖和源码并验证构建,同时区分不得更改的 JDK 包。

主要功能

  1. 01变更前检查构建基线
  2. 02识别需要迁移的包
  3. 03按目标运行时更新依赖
  4. 04修改源码与配置引用
  5. 05迁移后运行构建和测试

适用场景

  1. 01将项目迁移到 Tomcat 10 或 11
  2. 02执行其他技能委派的 Jakarta 命名空间迁移
  3. 03更新 Java 依赖和导入语句
  4. 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.* — 属于 JDK
  • javax.naming.* — 属于 JDK(JNDI)
  • javax.crypto.* — 属于 JDK
  • javax.net.* — 属于 JDK
  • javax.security.auth.* — 属于 JDK
  • javax.swing.*、javax.xml.parsers.* — JDK 包
步骤 2 — 更新 pom.xml

替换依赖坐标。选择与目标运行时匹配的 API 版本;下表针对 Jakarta EE 10(Tomcat 10.1+、Servlet 6.0):

目标运行时Jakarta EEServletPersistenceValidationAnnotations
Tomcat 10.095.03.03.02.0
Tomcat 10.1106.03.13.02.1
Tomcat 11116.13.23.13.0
旧版新版
javax.servlet:javax.servlet-apijakarta.servlet:jakarta.servlet-api:6.0.0
javax.persistence:javax.persistence-apijakarta.persistence:jakarta.persistence-api:3.1.0
javax.validation:validation-apijakarta.validation:jakarta.validation-api:3.0.2
javax.annotation:javax.annotation-apijakarta.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 — 验证
  1. 运行 mvn clean compile 或 gradlew build — 修复所有编译错误
  2. 运行 mvn test 或 gradlew test — 确保所有测试通过
  3. 搜索剩余的 javax.* 导入(排除 JDK 包)
上游资料(迁移前阅读)

获取目标版本对应的页面;如与本技能冲突,优先遵循上游资料。

输出

提供迁移摘要,列出所有已更改的文件、已替换的导入,以及任何所需的手动步骤。

评论

支持 Markdown