Apache Tomcat migration tool for Jakarta EE

Clone this repo:
  1. b577e28 No longer convert the javax.xml.namespace package (Fixes #9) by Emmanuel Bourg · 14 days ago master
  2. 8341e81 Convert the javax.management.j2ee package with the EE profile (Java EE Management API - JSR 77) by Emmanuel Bourg · 14 days ago
  3. 7902f20 Better formatting for the EESpecProfile regexps by Emmanuel Bourg · 14 days ago
  4. f393d76 Test for javax.xml.xpath.XPathConstants by Emmanuel Bourg · 2 weeks ago
  5. d35a385 Mention the Debian/Ubuntu package by Emmanuel Bourg · 3 weeks ago

Apache Tomcat migration tool for Jakarta EE

Build Status Coverage Status License


This tool is a work in progress.

The aim of the tool is to take a web application written for Java EE 8 that runs on Apache Tomcat 9 and convert it automatically so it runs on Apache Tomcat 10 which implements Jakarta EE 9.

The tool can be used from the command line or as an Ant task.



Build the migration tool with:

./mvnw verify


Migrate your Servlet application with:

java -jar target/jakartaee-migration-*-shaded.jar <source> <destination>

The source should be a path to a compressed archive, a folder or an individual file. The destination will be created at the specified path as a resource of the same type as the source.

INFO This tool will remove cryptographic signatures from JAR files contained in the source, as the changed resources would not match them anymore.

A warning will be logged for each JAR file where the signature has been removed.

This tool is also available on Debian and Ubuntu systems by installing the tomcat-jakartaee-migration package and invoking the javax2jakarta command.

Ant task

The migration tool is available as an Ant task, here is an example:

<taskdef name="javax2jakarta" classname="org.apache.tomcat.jakartaee.MigrationTask" classpath="jakartaee-migration-*-shaded.jar"/>

<javax2jakarta src="webapp.war" dest="webapp.migrated.war" profile="tomcat"/>

Differences between Java EE 8 and Jakarta EE 9

Jakarta EE 9 is still under development and there are some details that remain to be worked out.

The differences currently supported by this tool are:

  • Renaming packages for Jakarta EE 9 APIs from javax.* to jakarta.*

Note: It will not be necessary to migrate any references to XML schemas. The schemas don't directly reference javax packages and Jakarta EE 9 will continue to support the use of schemas from Java EE 8 and earlier.