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

如何配置IDEA支持Multi-Release Jar(MRJar)开发

IDEA 配置支持 MRJar(多版本Jar)开发的方法

直接把java、java9都标记为普通源码根时,IDEA默认会把两个目录的类加入同一个编译类路径,同全限定名的类必然报重复,不符合MRJar按JDK版本加载对应类的逻辑,需要按以下方式配置:

方案一:使用Maven/Gradle标准MRJar配置(推荐)

不用手动标记源码目录,按MRJar规范编写构建配置,IDEA会自动识别多版本源码结构,不会报重复类错误。
以Maven为例,pom.xml核心配置如下:

<build>
    <plugins>
        <!-- 多版本编译配置 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.12.1</version>
            <!-- 基础版本编译(对应java目录) -->
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
            <executions>
                <!-- Java 9版本类编译(对应java9目录) -->
                <execution>
                    <id>compile-java9</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <configuration>
                        <release>9</release>
                        <compileSourceRoots>
                            <compileSourceRoot>${project.basedir}/main/java9</compileSourceRoot>
                        </compileSourceRoots>
                        <multiReleaseOutput>true</multiReleaseOutput>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- Jar包标记为多版本Jar -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Multi-Release>true</Multi-Release>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

配置写完后重新导入Maven项目,IDEA会自动识别java9为Java 9版本专属源码目录,调试/运行时会根据当前项目设置的JDK版本自动加载对应路径下的DefaultVersion实现,不会报重复类错误。

方案二:无构建工具,手动配置IDEA项目

如果是纯手动创建的本地项目,不用Maven/Gradle,按以下步骤配置:

  • 打开项目结构设置(快捷键Ctrl+Alt+Shift+S/macOS 为Cmd+;),进入「Modules」- 对应模块的「Sources」标签
  • 先取消java9目录的普通源码根标记,仅把main/java标记为普通Sources Root,对应项目兼容的最低JDK版本(比如JDK 8)
  • 选中main/java9目录,在右侧配置栏把它的SDK指定为JDK 9,设置它的编译输出路径为项目输出根目录/META-INF/versions/9,符合MRJar高版本类的存放规范
  • 进入「Dependencies」标签页,调整源码条目的顺序:把java9对应的源码条目放在java源码条目之后,设置java9条目的作用域为Compile,配置规则为仅在JDK版本 >=9 时生效
  • 打开设置页「Build, Execution, Deployment -> Compiler -> Java Compiler」,找到对应模块,勾选Enable multi-release JAR support,填写最低支持版本为8,添加Java 9版本对应的源码路径为main/java9

配置完成后可以切换项目SDK验证:SDK切到JDK 8时,DefaultVersion会走java目录下的实现;切到JDK 9及以上版本时,自动走java9目录下的实现,重复类报错会消失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:33:34