Skip to content

The Jakarta migration relocates the legacy jsr250-api, el-api, ejb-api and JBoss EJB spec artifacts - #1278

Merged
jkschneider merged 1 commit into
jakarta/hibernate-validator-7from
jakarta/legacy-api-coordinates
Oct 3, 2026
Merged

jkschneider merged 1 commit into
jakarta/hibernate-validator-7from
jakarta/legacy-api-coordinates

Conversation

@jkschneider

Copy link
Copy Markdown
Member

The annotation, EL and EJB migrations relocated javax.annotation:javax.annotation-api, javax.el:javax.el-api and javax.ejb:javax.ejb-api but not older artifacts for the same APIs, so javax.annotation:jsr250-api, javax.el:el-api, javax.ejb:ejb-api and org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec stayed on the classpath, often beside a compile-scoped Jakarta API that the migration added for the moved imports. Each is now changed with ChangeDependency to jakarta.annotation-api 2.0.x, jakarta.el-api 4.0.x or jakarta.ejb-api 4.0.x, keeping its declared scope.

Found by a team of coding agents reviewing a Moderne run of org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta over the 31 Arquillian repositories (run 20261003120559-YQoma). The issue is legacy-javaee-api-coordinate-retained in the run's io.moderne.RecipeIssues data table (10 rows), and the fix was discussed and reviewed on the run's message board. A row from the table, as a generalized example:

Legacy API alias remains in the javax namespace after its consumers migrate to Jakarta. (arquillian/arquillian-core, testenrichers/resource/pom.xml, recipe org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta)

Before:

<dependency><groupId>javax.annotation</groupId><artifactId>jsr250-api</artifactId><version>1.0</version><scope>provided</scope></dependency>

What the recipe produced:

<dependency><groupId>javax.annotation</groupId><artifactId>jsr250-api</artifactId><version>1.0</version><scope>provided</scope></dependency>

Expected:

<dependency><groupId>jakarta.annotation</groupId><artifactId>jakarta.annotation-api</artifactId><version>2.0.0</version><scope>provided</scope></dependency>

Stacked on #1277 (15 of 19); merge that one first.

@jkschneider
jkschneider force-pushed the jakarta/legacy-api-coordinates branch from 972e9b6 to cb4e738 Compare October 3, 2026 22:26
@jkschneider
jkschneider added this pull request to stack #1283 October 3, 2026 22:39
@jkschneider
jkschneider merged commit 9da6c88 into jakarta/reflective-type-names Oct 3, 2026
@jkschneider
jkschneider deleted the jakarta/legacy-api-coordinates branch October 3, 2026 22:41
jkschneider added a commit that referenced this pull request Oct 4, 2026
#1271)

* javax-reflective-names-retained: migrate runtime Jakarta type names

* maven-coordinate-literal-retained: migrate validation artifact lookups (#1272)

* weld-javax-provider-retained: align Weld core with Jakarta CDI (#1273)

* `JettyUpgradeEE9` also upgrades the other Jetty dependencies, the servlet packages and the Java version (#1274)

* jetty-ee9-java-baseline: align Jetty dependencies packages and Java baseline

* jetty-ee9-java-baseline: leave standalone Jetty utility dependencies unchanged

* jetty-ee9-java-baseline: require a direct dependency before upgrading Java

* `JacksonJavaxToJakarta` keeps newer Jackson versions and shared version properties when relocating artifacts (#1275)

* jackson-version-downgrade: preserve newer versions and shared properties

* jackson-shared-version-property-split: cover older shared Jackson versions

* The Jakarta JAXB migration keeps the `javax.xml.bind` API for Arquillian Recorder 1.x binaries (#1276)

* recorder-javax-jaxb-api-removed: retain the API needed by Recorder binaries

* recorder-javax-jaxb-api-removed: limit retention to external binaries after migration

* hibernate-validator-javax-provider-retained: migrate legacy validation providers (#1277)

* legacy-javaee-api-coordinate-retained: migrate legacy annotation EL and EJB aliases (#1278)

* The Jakarta migration keeps a provided API provided instead of adding it again in compile scope (#1279)

* cdi-provided-scope-promoted: preserve provided CDI API scope

* cdi-provided-scope-promoted: distinguish provided declarations from runtime APIs

* provided-api-scope-overwritten: preserve provided Mail API scope

* provided-api-scope-overwritten: preserve container API scopes across Jakarta migrations

* The Jackson Jakarta migration adds the `defaultView` parameter to `ProviderBase._configForWriting` overrides (#1280)

* jackson-provider-override-signature: forward the default view parameter

* jackson-provider-override-signature: update callers of migrated overrides

* invocation-context-get-constructor-missing: complete legacy decorators (#1281)

* jakarta-api-duplicates-platform: respect provided platform APIs (#1282)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant