You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Eclipse Transformer Maven插件解决Spring Boot3的javax/jakarta依赖冲突?

解决Spring Boot 3与Katharsis/Crnk的Jakarta Servlet兼容问题

核心问题分析

Spring Boot 3全面切换到Jakarta EE API(jakarta.servlet.*),而停更的Katharsis及其继任者Crnk仍依赖旧的Java EE API(javax.servlet.*),导致编译时出现javax.servlet.Filter找不到、KatharsisFilterV2类型不兼容的错误。以下是几种可落地的解决方案:


方案一:修复Eclipse Transformer Maven插件配置

手动CLI转换可行但无法自动化,核心是调整插件的执行时机、依赖范围和仓库优先级,确保转换后的包被优先加载。

1. 父POM全局配置插件

在父POM的pluginManagement中统一配置转换器,确保多模块项目同步生效:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.eclipse.transformer</groupId>
                <artifactId>transformer-maven-plugin</artifactId>
                <version>0.4.0</version> <!-- 使用最新稳定版 -->
                <executions>
                    <execution>
                        <id>transform-katharsis-deps</id>
                        <phase>initialize</phase> <!-- 提前到依赖解析前执行 -->
                        <goals>
                            <goal>transform</goal>
                        </goals>
                        <configuration>
                            <!-- 转换所有Katharsis相关依赖 -->
                            <transformations>
                                <transformation>
                                    <groupId>io.katharsis</groupId>
                                    <artifactId>katharsis-spring</artifactId>
                                    <version>${katharsis.version}</version>
                                    <rules>org.eclipse.transformer.jakarta</rules> <!-- javax转jakarta规则 -->
                                </transformation>
                                <transformation>
                                    <groupId>io.katharsis</groupId>
                                    <artifactId>katharsis-core</artifactId>
                                    <version>${katharsis.version}</version>
                                    <rules>org.eclipse.transformer.jakarta</rules>
                                </transformation>
                            </transformations>
                            <!-- 输出转换后的包到项目临时目录,避免污染本地仓库 -->
                            <outputDirectory>${project.build.directory}/transformed-deps</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<!-- 配置仓库优先级:转换后的本地目录优先于中央仓库 -->
<repositories>
    <repository>
        <id>transformed-local</id>
        <url>file://${project.build.directory}/transformed-deps</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
        <id>maven-central</id>
        <url>https://repo1.maven.org/maven2</url>
    </repository>
</repositories>

2. 子模块启用插件

子模块无需重复配置,只需继承父POM并声明插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.transformer</groupId>
            <artifactId>transformer-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

方案二:使用OpenRewrite自动迁移依赖

OpenRewrite提供成熟的Jakarta迁移规则,可批量转换依赖中的javax类为jakarta,同时支持项目代码的迁移(可选)。

配置OpenRewrite插件

<build>
    <plugins>
        <plugin>
            <groupId>org.openrewrite.maven</groupId>
            <artifactId>rewrite-maven-plugin</artifactId>
            <version>5.40.0</version>
            <configuration>
                <activeRecipes>
                    <recipe>org.openrewrite.java.jakarta.JavaxMigrationToJakarta</recipe>
                    <recipe>org.openrewrite.java.spring.boot3.SpringBoot3Migration</recipe>
                </activeRecipes>
                <!-- 仅转换依赖,不修改项目代码(可选) -->
                <exclusions>
                    <exclusion>**/src/main/java/**</exclusion>
                    <exclusion>**/src/test/java/**</exclusion>
                </exclusions>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.openrewrite.recipe</groupId>
                    <artifactId>rewrite-spring</artifactId>
                    <version>5.40.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

执行转换命令:

mvn rewrite:run

方案三:预转换依赖并上传私有仓库

如果插件配置始终无法生效,可提前手动转换Katharsis包,上传到私有Maven仓库(如Nexus/Artifactory),项目直接依赖转换后的版本:

1. CLI转换并上传(本地示例)

# 下载原依赖包
mvn dependency:get -DgroupId=io.katharsis -DartifactId=katharsis-spring -Dversion=3.0.2 -Ddest=katharsis-original.jar

# 用Transformer CLI转换
java -jar transformer-cli-0.4.0.jar -rules jakarta katharsis-original.jar katharsis-jakarta-3.0.2.jar

# 安装到本地仓库(或上传到私有仓库)
mvn install:install-file -Dfile=katharsis-jakarta-3.0.2.jar -DgroupId=io.katharsis -DartifactId=katharsis-spring -Dversion=3.0.2-jakarta -Dpackaging=jar

2. 项目依赖转换后的版本

<dependency>
    <groupId>io.katharsis</groupId>
    <artifactId>katharsis-spring</artifactId>
    <version>3.0.2-jakarta</version>
</dependency>

在CI/CD中,可将转换+上传步骤封装为脚本,提前预构建依赖包。


方案四:替换为活跃维护的替代库

如果上述方案仍无法解决长期维护问题,建议替换为适配Spring Boot 3的REST API框架:

  • Spring Data REST:官方原生支持,完全适配Jakarta EE,无需额外兼容处理
  • Quarkus REST Data with Panache:适合微服务场景,天然支持Jakarta
  • OpenAPI Generator:可生成符合规范的REST接口代码,灵活适配Spring Boot 3

内容的提问来源于stack exchange,提问作者Joshua Steele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:47:13