From 0887bb890f8f09dfbdc49afb0b89c6b3517b6930 Mon Sep 17 00:00:00 2001 From: abccbaandy Date: Wed, 22 May 2024 16:08:02 +0800 Subject: [PATCH 1/5] draft for RemoveJakartaAnnotationDependency --- .../META-INF/rewrite/jakarta-ee-9.yml | 14 +++ .../migrate/jakarta/JavaxToJakartaTest.java | 101 ++++++++++++++++++ 2 files changed, 115 insertions(+) diff --git a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml index f08d7048ff..c82e78fe23 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -61,6 +61,8 @@ recipeList: - org.openrewrite.java.migrate.jakarta.UpdateApacheWSSecurityPackages - org.openrewrite.java.migrate.javaee8 - org.openrewrite.java.migrate.jakarta.JavaxEEApiToJakarta + - org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency + --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.migrate.jakarta.JavaxActivationMigrationToJakartaActivation @@ -988,3 +990,15 @@ recipeList: groupId: jakarta.platform artifactId: "*" newVersion: 9.0.0 +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency +displayName: Remove jakarta.annotation-api dependency if already manage by other dependency +description: This recipe mainly revert the jakarta.annotation-api added by org.openrewrite.java.migrate.javax.AddCommonAnnotationsDependencies +recipeList: + - org.openrewrite.java.dependencies.DependencyInsight: + groupIdPattern: jakarta.annotation + artifactIdPattern: jakarta.annotation-api + - org.openrewrite.java.dependencies.RemoveDependency: + groupId: jakarta.annotation + artifactId: jakarta.annotation-api \ No newline at end of file diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java index d9cc086456..f479d0c64f 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java @@ -498,4 +498,105 @@ public class TestApplication { ) ); } + + @Test + void projectWithSpringBoot3StarterWeb() { + rewriteRun( + spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)), + mavenProject( + "Sample", + pomXml( + """ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + com.example + demo + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + 17 + + + + jakarta.annotation + jakarta.annotation-api + 1.3.5 + + + org.springframework.boot + spring-boot-starter-web + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + """, + """ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + com.example + demo + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + """ + ), + srcMainJava( + //language=java + java( + """ + import jakarta.servlet.A; + public class TestApplication { + } + """ + ) + ) + ) + ); + } } From db6dff55b27ae9d8d40d823f45eca8889a64f9d6 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 22 May 2024 13:32:53 +0200 Subject: [PATCH 2/5] Apply suggestions from code review --- src/main/resources/META-INF/rewrite/jakarta-ee-9.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml index c82e78fe23..35ff650fcb 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -995,10 +995,11 @@ type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency displayName: Remove jakarta.annotation-api dependency if already manage by other dependency description: This recipe mainly revert the jakarta.annotation-api added by org.openrewrite.java.migrate.javax.AddCommonAnnotationsDependencies -recipeList: +preconditions: - org.openrewrite.java.dependencies.DependencyInsight: groupIdPattern: jakarta.annotation artifactIdPattern: jakarta.annotation-api +recipeList: - org.openrewrite.java.dependencies.RemoveDependency: groupId: jakarta.annotation artifactId: jakarta.annotation-api \ No newline at end of file From 84d4c4be9bfb98277e3d4ed58830144a1ca1eeef Mon Sep 17 00:00:00 2001 From: abccbaandy Date: Thu, 23 May 2024 16:27:30 +0800 Subject: [PATCH 3/5] add negative test --- .../migrate/jakarta/JavaxToJakartaTest.java | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java index f479d0c64f..73ac95e049 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java @@ -500,7 +500,7 @@ public class TestApplication { } @Test - void projectWithSpringBoot3StarterWeb() { + void projectWithSpringBoot3StarterWebShouldRemoveJakartaDependency() { rewriteRun( spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)), mavenProject( @@ -599,4 +599,43 @@ public class TestApplication { ) ); } + + @Test + void doNothingIfNotFoundTransitiveDependency() { + rewriteRun( + spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)), + mavenProject( + "Sample", + //language=java + srcMainJava( + java( + """ + import jakarta.servlet.A; + public class TestApplication { + } + """ + ) + ), + //language=xml + pomXml( + """ + + + 4.0.0 + org.sample + sample + 1.0.0 + + + jakarta.annotation + jakarta.annotation-api + 1.3.5 + + + + """ + ) + ) + ); + } } From 8aeb480df55358b60dfe0f85d323007a12396aed Mon Sep 17 00:00:00 2001 From: abccbaandy Date: Fri, 24 May 2024 14:08:37 +0800 Subject: [PATCH 4/5] find spring boot only This is a workaround, reason:https://github.com/openrewrite/rewrite-migrate-java/issues/481#issuecomment-2126619941 --- src/main/resources/META-INF/rewrite/jakarta-ee-9.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml index 35ff650fcb..7f29bdae8e 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -993,12 +993,12 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency -displayName: Remove jakarta.annotation-api dependency if already manage by other dependency +displayName: Remove jakarta.annotation-api dependency if already manage by spring boot description: This recipe mainly revert the jakarta.annotation-api added by org.openrewrite.java.migrate.javax.AddCommonAnnotationsDependencies preconditions: - org.openrewrite.java.dependencies.DependencyInsight: - groupIdPattern: jakarta.annotation - artifactIdPattern: jakarta.annotation-api + groupIdPattern: org.springframework.boot + artifactIdPattern: spring-boot-starter recipeList: - org.openrewrite.java.dependencies.RemoveDependency: groupId: jakarta.annotation From 85d47bf6fa3edb9f967180fcb9e82f3ccffa5a54 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 24 May 2024 10:44:20 +0200 Subject: [PATCH 5/5] Minor polish --- .../META-INF/rewrite/jakarta-ee-9.yml | 4 +- .../migrate/jakarta/JavaxToJakartaTest.java | 110 +++++++----------- 2 files changed, 43 insertions(+), 71 deletions(-) diff --git a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml index 7f29bdae8e..c10daacdeb 100644 --- a/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml +++ b/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml @@ -993,8 +993,8 @@ recipeList: --- type: specs.openrewrite.org/v1beta/recipe name: org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency -displayName: Remove jakarta.annotation-api dependency if already manage by spring boot -description: This recipe mainly revert the jakarta.annotation-api added by org.openrewrite.java.migrate.javax.AddCommonAnnotationsDependencies +displayName: Remove `jakarta.annotation-api` dependency when managed by Spring Boot +description: Counteract the `jakarta.annotation-api` added by `org.openrewrite.java.migrate.javax.AddCommonAnnotationsDependencies` for Spring Boot applications. preconditions: - org.openrewrite.java.dependencies.DependencyInsight: groupIdPattern: org.springframework.boot diff --git a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java index 73ac95e049..9afbaa2e58 100644 --- a/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java +++ b/src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java @@ -437,47 +437,48 @@ void projectWithSpringBootStarterWeb() { spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)), mavenProject( "Sample", + //language=xml pomXml( """ - - - 4.0.0 - + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.6 + + + com.example + demo + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + 17 + + + + jakarta.servlet + jakarta.servlet-api + + org.springframework.boot - spring-boot-starter-parent - 2.7.6 - - - com.example - demo - 0.0.1-SNAPSHOT - demo - Demo project for Spring Boot - - 17 - - - - jakarta.servlet - jakarta.servlet-api - - - org.springframework.boot - spring-boot-starter-web - - + spring-boot-starter-web + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + - + """ ), srcMainJava( @@ -505,6 +506,7 @@ void projectWithSpringBoot3StarterWebShouldRemoveJakartaDependency() { spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)), mavenProject( "Sample", + //language=xml pomXml( """ @@ -520,11 +522,6 @@ void projectWithSpringBoot3StarterWebShouldRemoveJakartaDependency() { com.example demo 0.0.1-SNAPSHOT - demo - Demo project for Spring Boot - - 17 - jakarta.annotation @@ -536,16 +533,6 @@ void projectWithSpringBoot3StarterWebShouldRemoveJakartaDependency() { spring-boot-starter-web - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - """, """ @@ -562,27 +549,12 @@ void projectWithSpringBoot3StarterWebShouldRemoveJakartaDependency() { com.example demo 0.0.1-SNAPSHOT - demo - Demo project for Spring Boot - - 17 - org.springframework.boot spring-boot-starter-web - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - """ ), @@ -610,9 +582,9 @@ void doNothingIfNotFoundTransitiveDependency() { srcMainJava( java( """ - import jakarta.servlet.A; - public class TestApplication { - } + import jakarta.servlet.A; + public class TestApplication { + } """ ) ),