Skip to content

Commit 110db88

Browse files
Remove Jakarta annotation dependency when moving to Jakarta packages (#487)
* draft for RemoveJakartaAnnotationDependency * Apply suggestions from code review * add negative test * find spring boot only This is a workaround, reason:#481 (comment) * Minor polish --------- Co-authored-by: Tim te Beek <[email protected]> Co-authored-by: Tim te Beek <[email protected]>
1 parent fcddb6d commit 110db88

File tree

2 files changed

+163
-36
lines changed

2 files changed

+163
-36
lines changed

src/main/resources/META-INF/rewrite/jakarta-ee-9.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ recipeList:
6161
- org.openrewrite.java.migrate.jakarta.UpdateApacheWSSecurityPackages
6262
- org.openrewrite.java.migrate.javaee8
6363
- org.openrewrite.java.migrate.jakarta.JavaxEEApiToJakarta
64+
- org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency
65+
6466
---
6567
type: specs.openrewrite.org/v1beta/recipe
6668
name: org.openrewrite.java.migrate.jakarta.JavaxActivationMigrationToJakartaActivation
@@ -988,3 +990,16 @@ recipeList:
988990
groupId: jakarta.platform
989991
artifactId: "*"
990992
newVersion: 9.0.0
993+
---
994+
type: specs.openrewrite.org/v1beta/recipe
995+
name: org.openrewrite.java.migrate.jakarta.RemoveJakartaAnnotationDependency
996+
displayName: Remove `jakarta.annotation-api` dependency when managed by Spring Boot
997+
description: Counteract the `jakarta.annotation-api` added by `org.openrewrite.java.migrate.javax.AddCommonAnnotationsDependencies` for Spring Boot applications.
998+
preconditions:
999+
- org.openrewrite.java.dependencies.DependencyInsight:
1000+
groupIdPattern: org.springframework.boot
1001+
artifactIdPattern: spring-boot-starter
1002+
recipeList:
1003+
- org.openrewrite.java.dependencies.RemoveDependency:
1004+
groupId: jakarta.annotation
1005+
artifactId: jakarta.annotation-api

src/test/java/org/openrewrite/java/migrate/jakarta/JavaxToJakartaTest.java

Lines changed: 148 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -437,47 +437,48 @@ void projectWithSpringBootStarterWeb() {
437437
spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)),
438438
mavenProject(
439439
"Sample",
440+
//language=xml
440441
pomXml(
441442
"""
442-
<?xml version="1.0" encoding="UTF-8"?>
443-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
444-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
445-
<modelVersion>4.0.0</modelVersion>
446-
<parent>
443+
<?xml version="1.0" encoding="UTF-8"?>
444+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
445+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
446+
<modelVersion>4.0.0</modelVersion>
447+
<parent>
448+
<groupId>org.springframework.boot</groupId>
449+
<artifactId>spring-boot-starter-parent</artifactId>
450+
<version>2.7.6</version>
451+
<relativePath/> <!-- lookup parent from repository -->
452+
</parent>
453+
<groupId>com.example</groupId>
454+
<artifactId>demo</artifactId>
455+
<version>0.0.1-SNAPSHOT</version>
456+
<name>demo</name>
457+
<description>Demo project for Spring Boot</description>
458+
<properties>
459+
<java.version>17</java.version>
460+
</properties>
461+
<dependencies>
462+
<dependency>
463+
<groupId>jakarta.servlet</groupId>
464+
<artifactId>jakarta.servlet-api</artifactId>
465+
</dependency>
466+
<dependency>
447467
<groupId>org.springframework.boot</groupId>
448-
<artifactId>spring-boot-starter-parent</artifactId>
449-
<version>2.7.6</version>
450-
<relativePath/> <!-- lookup parent from repository -->
451-
</parent>
452-
<groupId>com.example</groupId>
453-
<artifactId>demo</artifactId>
454-
<version>0.0.1-SNAPSHOT</version>
455-
<name>demo</name>
456-
<description>Demo project for Spring Boot</description>
457-
<properties>
458-
<java.version>17</java.version>
459-
</properties>
460-
<dependencies>
461-
<dependency>
462-
<groupId>jakarta.servlet</groupId>
463-
<artifactId>jakarta.servlet-api</artifactId>
464-
</dependency>
465-
<dependency>
466-
<groupId>org.springframework.boot</groupId>
467-
<artifactId>spring-boot-starter-web</artifactId>
468-
</dependency>
469-
</dependencies>
468+
<artifactId>spring-boot-starter-web</artifactId>
469+
</dependency>
470+
</dependencies>
470471
471-
<build>
472-
<plugins>
473-
<plugin>
474-
<groupId>org.springframework.boot</groupId>
475-
<artifactId>spring-boot-maven-plugin</artifactId>
476-
</plugin>
477-
</plugins>
478-
</build>
472+
<build>
473+
<plugins>
474+
<plugin>
475+
<groupId>org.springframework.boot</groupId>
476+
<artifactId>spring-boot-maven-plugin</artifactId>
477+
</plugin>
478+
</plugins>
479+
</build>
479480
480-
</project>
481+
</project>
481482
"""
482483
),
483484
srcMainJava(
@@ -498,4 +499,115 @@ public class TestApplication {
498499
)
499500
);
500501
}
502+
503+
@Test
504+
void projectWithSpringBoot3StarterWebShouldRemoveJakartaDependency() {
505+
rewriteRun(
506+
spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)),
507+
mavenProject(
508+
"Sample",
509+
//language=xml
510+
pomXml(
511+
"""
512+
<?xml version="1.0" encoding="UTF-8"?>
513+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
514+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
515+
<modelVersion>4.0.0</modelVersion>
516+
<parent>
517+
<groupId>org.springframework.boot</groupId>
518+
<artifactId>spring-boot-starter-parent</artifactId>
519+
<version>3.2.5</version>
520+
<relativePath/> <!-- lookup parent from repository -->
521+
</parent>
522+
<groupId>com.example</groupId>
523+
<artifactId>demo</artifactId>
524+
<version>0.0.1-SNAPSHOT</version>
525+
<dependencies>
526+
<dependency>
527+
<groupId>jakarta.annotation</groupId>
528+
<artifactId>jakarta.annotation-api</artifactId>
529+
<version>1.3.5</version>
530+
</dependency>
531+
<dependency>
532+
<groupId>org.springframework.boot</groupId>
533+
<artifactId>spring-boot-starter-web</artifactId>
534+
</dependency>
535+
</dependencies>
536+
</project>
537+
""",
538+
"""
539+
<?xml version="1.0" encoding="UTF-8"?>
540+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
541+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
542+
<modelVersion>4.0.0</modelVersion>
543+
<parent>
544+
<groupId>org.springframework.boot</groupId>
545+
<artifactId>spring-boot-starter-parent</artifactId>
546+
<version>3.2.5</version>
547+
<relativePath/> <!-- lookup parent from repository -->
548+
</parent>
549+
<groupId>com.example</groupId>
550+
<artifactId>demo</artifactId>
551+
<version>0.0.1-SNAPSHOT</version>
552+
<dependencies>
553+
<dependency>
554+
<groupId>org.springframework.boot</groupId>
555+
<artifactId>spring-boot-starter-web</artifactId>
556+
</dependency>
557+
</dependencies>
558+
</project>
559+
"""
560+
),
561+
srcMainJava(
562+
//language=java
563+
java(
564+
"""
565+
import jakarta.servlet.A;
566+
public class TestApplication {
567+
}
568+
"""
569+
)
570+
)
571+
)
572+
);
573+
}
574+
575+
@Test
576+
void doNothingIfNotFoundTransitiveDependency() {
577+
rewriteRun(
578+
spec -> spec.parser(JavaParser.fromJavaVersion().dependsOn(javaxServlet)),
579+
mavenProject(
580+
"Sample",
581+
//language=java
582+
srcMainJava(
583+
java(
584+
"""
585+
import jakarta.servlet.A;
586+
public class TestApplication {
587+
}
588+
"""
589+
)
590+
),
591+
//language=xml
592+
pomXml(
593+
"""
594+
<?xml version="1.0" encoding="UTF-8"?>
595+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
596+
<modelVersion>4.0.0</modelVersion>
597+
<groupId>org.sample</groupId>
598+
<artifactId>sample</artifactId>
599+
<version>1.0.0</version>
600+
<dependencies>
601+
<dependency>
602+
<groupId>jakarta.annotation</groupId>
603+
<artifactId>jakarta.annotation-api</artifactId>
604+
<version>1.3.5</version>
605+
</dependency>
606+
</dependencies>
607+
</project>
608+
"""
609+
)
610+
)
611+
);
612+
}
501613
}

0 commit comments

Comments
 (0)