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

Java 17迁移遇split package问题:jaxrs-api与guava依赖冲突

Java 17迁移中第三方依赖split package冲突解决方案

针对你遇到的javax.annotation拆分包问题(模块系统报错module slf4j.api reads package javax.annotation from both jsr305 and jaxrs.api),可以试试以下几种解决思路:

  • 强制统一依赖版本并排除冲突包
    在Maven的dependencyManagement节点中锁定官方的javax.annotation-api,同时排除第三方依赖中自带的冲突包:

    <dependencyManagement>
        <dependencies>
            <!-- 强制所有依赖使用官方统一的javax.annotation-api -->
            <dependency>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>1.3.2</version>
                <scope>compile</scope>
            </dependency>
            <!-- 给jaxrs-api排除所有额外依赖(若它自身打包了javax.annotation类,需结合Shade插件处理) -->
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>jaxrs-api</artifactId>
                <version>你的项目使用版本</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- 排除guava依赖的jsr305包 -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>你的项目使用版本</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.google.code.findbugs</groupId>
                        <artifactId>jsr305</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 用Maven Shade插件移除重复类
    如果第三方依赖自身打包了javax.annotation的类(而非通过依赖引入),可以用Shade插件在构建时删除这些重复类,只保留官方包的内容:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.4.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <!-- 移除jaxrs-api中的javax.annotation包类 -->
                                <filter>
                                    <artifact>org.jboss.resteasy:jaxrs-api</artifact>
                                    <excludes>
                                        <exclude>javax/annotation/**</exclude>
                                    </excludes>
                                </filter>
                                <!-- 移除jsr305中的javax.annotation包类 -->
                                <filter>
                                    <artifact>com.google.code.findbugs:jsr305</artifact>
                                    <excludes>
                                        <exclude>javax/annotation/**</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
  • 使用--patch-module参数修补模块
    针对Java模块系统的拆分包问题,可以通过--patch-module参数,将官方javax.annotation-api的类补丁到冲突的模块中,让模块系统认为该包只有一个来源:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <release>17</release>
                    <compilerArgs>
                        <!-- 将javax.annotation-api补丁到jaxrs.api模块 -->
                        <arg>--patch-module</arg>
                        <arg>jaxrs.api=${settings.localRepository}/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar</arg>
                        <!-- 将javax.annotation-api补丁到slf4j.api模块 -->
                        <arg>--patch-module</arg>
                        <arg>slf4j.api=${settings.localRepository}/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    注意替换路径为你本地仓库中javax.annotation-api的实际路径。

  • 尝试升级依赖版本
    检查jaxrs-api和guava的新版本:

    • Guava 31.0.1及以上版本已移除对jsr305的依赖,若项目能兼容,升级后可直接避免jsr305带来的冲突;
    • Resteasy的新版本可能已调整依赖结构,不再自带javax.annotation类,改为依赖官方的javax.annotation-api。

内容的提问来源于stack exchange,提问作者Matty Thompson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:50