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

如何在IntelliJ中屏蔽Java 9的拆分包编译错误?

解决JDK9 + IntelliJ 2017.2.6拆分包编译错误的方案

我之前碰到过好几个类似的案例,本质是JDK9引入的模块系统(JPMS)对**拆分包(split package)**的严格限制,而Maven和你用的老版本IntelliJ在JDK9编译策略上没对齐——Maven默认还在走传统类路径的兼容模式,不会强制检查拆分包,而IDEA 2017.2.6可能直接启用了JPMS的严格校验,所以就出现了Maven构建正常但IDE报错的情况。下面给你几个靠谱的解决办法,按优先级推荐:

1. 调整IntelliJ编译参数,兼容拆分包

这是最快的临时解决办法,让IDE放宽对拆分包的检查:

  • 打开File → Settings → Build, Execution, Deployment → Compiler → Java Compiler
  • 在列表中找到你的项目模块,在Additional command line parameters中添加以下参数:
    --add-modules ALL-MODULE-PATH --add-reads [你的模块名称]=ALL-UNNAMED --permit-illegal-access
    
    (把[你的模块名称]替换成你项目的实际模块名,比如根模块就填项目名)
  • 点击Apply并重启IDE,再重新编译试试。

如果你的项目没有定义module-info.java(非模块化项目),还可以尝试更简单的配置:

  • 打开File → Project Structure → Modules → [你的模块] → Sources
  • 确保没有module-info.java文件(如果有可以暂时删除,不需要模块化的话),然后把模块的语言级别设置为9。

2. 升级IntelliJ IDEA版本

IDEA 2017.2.6是2017年的老版本,对JDK9的模块系统支持非常不完善,后续的版本(比如2018.1及以后)针对JPMS做了大量兼容性优化,很多拆分包的问题会被自动处理,或者提供更直观的配置选项。如果条件允许,升级到较新的IDEA版本是最彻底的解决办法。

3. 统一Maven和IntelliJ的编译配置

让IntelliJ完全继承Maven的编译策略,避免两者行为不一致:
在你的pom.xml中添加maven-compiler-plugin的配置,明确指定JDK9的兼容编译参数:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version> <!-- 这个版本完全支持JDK9 -->
            <configuration>
                <source>9</source>
                <target>9</target>
                <compilerArgs>
                    <arg>--add-modules=ALL-MODULE-PATH</arg>
                    <arg>--permit-illegal-access</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后,右键项目 → Maven → Reload Project,IntelliJ会自动同步Maven的编译配置,这样IDE的编译行为就和Maven保持一致了。

4. 针对性用--patch-module处理冲突(进阶方案)

如果上面的方法都无效,可以针对具体的冲突包用JPMS的--patch-module参数合并路径:
比如,假设lucene-misc.jar和lucene-sandbox.jar都定义了org.apache.lucene.util包,你可以在IDE的编译参数中添加:

--patch-module org.apache.lucene.misc=/path/to/lucene-sandbox.jar

不过这个方法需要你找到冲突JAR的具体路径,操作起来比较繁琐,适合特定场景下的精准修复。

内容的提问来源于stack exchange,提问作者Ivan dal Bosco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:14:02