Ubuntu下使用Maven构建ANTLR4报package is not visible错误如何解决
问题根因
该报错是JDK 9及以上版本引入的Java平台模块系统(JPMS)的访问限制导致的。com.sun.tools.javac相关包属于JDK内部的jdk.compiler模块,默认不对外暴露给非模块化的普通Java项目调用。你Windows环境使用的是无模块系统限制的JDK 8,因此可以正常构建,Ubuntu环境使用的是JDK 9+版本,因此触发访问限制报错。
修复方案
方案1:切换构建用JDK为JDK 8(最稳妥,兼容性最高)
- 执行如下命令安装OpenJDK 8:
sudo apt install openjdk-8-jdk - 切换系统默认JDK版本,依次执行以下两条命令,在弹出的选择列表中选中JDK 8对应的条目即可:
sudo update-alternatives --config java sudo update-alternatives --config javac - 切换完成后重新执行
mvn install -DskipTests即可正常构建。
方案2:修改Maven编译配置适配高版本JDK
如果必须使用JDK 9+版本构建,可以修改项目根目录下的pom.xml文件,找到maven-compiler-plugin的配置节点,添加模块导出参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> <arg>--add-exports</arg> <arg>jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> <arg>--add-exports</arg> <arg>jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <!-- 若后续有其他同类型javac包报错,按照以上格式继续添加对应导出规则即可 --> </compilerArgs> </configuration> </plugin>
修改保存后重新执行构建命令即可。
方案3:临时在命令行传递编译参数
如果不想修改项目的pom.xml文件,直接执行以下带参数的构建命令即可:
mvn install -DskipTests \ -Dmaven.compiler.args=--add-exports,jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED,--add-exports,jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
内容的提问来源于stack exchange,提问作者Ivan Kochurkin
相关产品推荐
相关产品推荐

