Symbol is declared in module X which does not export package X
本文最后更新于 673 天前,其中的信息可能已经有所发展或是发生改变。
内容目录

前排提示,此方法适用于 Gradle + Kotlin 的项目。

在写 sgpublic/XXPreference: Manage SharedPreference with annotation! (github.com) 项目的时候,我需要使用 java.compiler 中的内容修改 Java 语法树,于是乎便遇到了以下报错:

Symbol is declared in module 'jdk.compiler' which does not export package 'com.sun.tools.javac.tree'

网上找到的方法是在 gradle.propertise 中添加 -add-exports

org.gradle.jvmargs=
 --add-exports=com.sun.tools.javac.tree=ALL-UNNAMED
 --add-exports=...

这个方法有效,但仅适用于纯 Java 项目,而对于 Kotlin 项目,解决方法如为,在每个使用了未导出类的 .kt 文件的开头添加内容:

@file:Suppress("JAVA_MODULE_DOES_NOT_EXPORT_PACKAGE")

从而无需手动添加 --add-opens--add-exports 即可成功编译。

但编译后用户使用的时候还是会报这个错误,此时可参考 Lombok 的解决方案,通过反射强行添加 exportsLombokProcesser.java

上一篇
下一篇