Skip to content
Skillpedia
APIs & servers (backend)40k · #5206

javax-to-jakarta-migration

Assists your agent in migrating Java code from 'javax.*' to 'jakarta.*'. It's essential for updating frameworks and ensuring compatibility with newer versions.

What it does

This tool helps update your Java code by replacing old packages (javax.*) with newer ones (jakarta.*). This is necessary to use newer versions of technologies like the Tomcat web server or the Jakarta EE framework.

When to use it

  • ✓When you want to use Tomcat 10+ or Jakarta EE.
  • ✓When a Java or Spring Boot upgrade tool suggests this migration.
  • ✓When you explicitly ask to migrate from 'javax' to 'jakarta'.

Example of what to ask your AI

“Update my Java code to use the Jakarta EE namespace.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/github/awesome-copilot/blob/main/skills/javax-to-jakarta-migration/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/github/awesome-copilot/blob/main/skills/javax-to-jakarta-migration/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool finds and replaces 'javax.*' packages with 'jakarta.*' in your code files and configurations. It also updates your project's dependencies to the correct Jakarta EE versions.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add github/awesome-copilot --skill javax-to-jakarta-migration

Or download just the file:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/javax-to-jakarta-migration/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

javax → jakarta Migration Skill

When to Use

  • The user explicitly asks to migrate to the jakarta namespace, Tomcat 10+/11 or Jakarta EE
  • java-upgrade or spring-boot-4-migration delegates the namespace migration

Detecting javax.* imports alone does not authorize this migration; report them instead.

In Spring Boot projects, the Boot BOM manages Jakarta versions: do not pin the versions below, and let the Boot version decide the Jakarta EE level (Boot 4 = Jakarta EE 11, Servlet 6.1). The examples below target Jakarta EE 10 (Servlet 6.0, Tomcat 10.1+) in non-Boot projects.

Procedure

Step 0 — Baseline

Run ./mvnw verify or ./gradlew build first and record the result; do not migrate on a red baseline. Make the change in a dedicated commit/step.

Step 1 — Scan for javax Usage

Search the codebase for all javax.* imports that need migration:

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.*

Do NOT migrate these (they remain in javax.*):

  • javax.sql.* — part of JDK
  • javax.naming.* — part of JDK (JNDI)
  • javax.crypto.* — part of JDK
  • javax.net.* — part of JDK
  • javax.security.auth.* — part of JDK
  • javax.swing.*, javax.xml.parsers.* — JDK packages

Step 2 — Update pom.xml

Replace dependency coordinates. Choose API versions that match the target runtime; the table below is for Jakarta EE 10 (Tomcat 10.1+, Servlet 6.0):

Target runtime 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
Old New
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

Step 3 — Update web.xml (if present)

The version must match the target Servlet level (5.0 for Tomcat 10.0, 6.0 for Tomcat 10.1, 6.1 for Tomcat 11); the example below is for Servlet 6.0:

<!-- Old namespace -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">

<!-- New namespace -->
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="6.0">

Step 4 — Update Java Source Files

Replace only the Jakarta EE javax. imports identified in Step 1 with their jakarta. equivalents in .java files; leave JDK packages (for example javax.sql, javax.crypto) unchanged. Also check non-Java references: persistence.xml (javax.persistence.* properties), META-INF/services, beans.xml, properties/YAML, string class names and reflection.

Step 5 — Verify

  1. Run mvn clean compile or gradlew build — fix any compilation errors
  2. Run mvn test or gradlew test — ensure all tests pass
  3. Search for any remaining javax.* imports (excluding JDK packages)

Upstream sources (read before migrating)

Fetch the page for the target version; prefer it over this skill when they conflict.

Output

Provide a migration summary listing all files changed, imports replaced, and any manual steps required.

FAQ

Which 'javax.*' packages should NOT be migrated?

Packages that are part of the JDK (Java Development Kit), such as javax.sql.*, javax.naming.*, javax.crypto.*, javax.net.*, javax.security.auth.*, javax.swing.*, and javax.xml.parsers.*, should not be migrated.

What are the 'javax' and 'jakarta' namespaces?

They are different names for sets of Java libraries. 'Jakarta' is the newer evolution, used in more recent versions of servers and frameworks.

Do I need to do anything before using this tool?

Yes, it's recommended to run your project's build command (like './mvnw verify' or './gradlew build') before and after the migration to ensure everything is working correctly.

Details

Original description by the author

Migrate Java code from javax.* to jakarta.* namespace. Use only when the user explicitly asks for a javax to jakarta namespace or framework migration (for example to Tomcat 10+/11 or Jakarta EE), or when java-upgrade or spring-boot-4-migration delegates it. Finding javax imports alone does not authorize a migration.

repo: github/awesome-copilot

Popularity

GitHub stars
40k
Ranking position
#5206
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills