本文最后更新于 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
的解决方案,通过反射强行添加 exports
:LombokProcesser.java