The project can mutate individual class files and thus could be used in a class loader to dynamically rename type references at runtime while classes are being loaded. This could allow a program such as an application server to use this support in its class loaders to allow existing libraries using older type name, such as javax. types, to be transformed, loaded and executed in a newer environment using renamed types.
The project can also mutate all types in a JAR or WAR file. This could be used during a tooling phase to process dependencies and application jars prior to assembly so that all the classes are transformed to the renamed types.
The tools are rule driven which allow users to control which class files in a JAR/WAR are transformed and how they are transformed. Different users may want different rules depending upon their specific needs. While the initial impetus for the project was the Jakarta EE package renaming issue, the scope of the project is broader to support other renaming scenarios. So the tools can be used for any renaming challenge, not just the specific Jakarta EE package renames.
The tools provides an API allowing it to be embedded in a runtime to dynamically transform class files during the class loader definition process. The API also supports transforming JAR files. A CLI is also provided to allow use from the command line. Ultimately, the tools can be packaged as Gradle and Maven plugins to incorporate in a broader tool chain.
The tools are based upon the class file and JAR file manipulation capabilities of the the Bnd tool. Bnd will be a dependency of the tools and is not part of the project.
The content of this open source project is received and distributed under the license(s) listed above. Some source code and binaries may be distributed under different terms. Specific license information is provided in file headers and in NOTICE files distributed with the project's binaries.