这个Java·项目异常怎么解决??

Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @45addb81

这个异常看起来是由于访问权限问题引起的,可能是由于模块系统的一些限制。为了解决这个问题,你可以尝试使用 `--add-opens` 选项打开相关的包,以便解决模块间的访问限制。

在运行 Java 程序时,可以使用以下命令格式:

```bash
java --add-opens <模块/包名>=<目标模块>=<权限> -jar YourProject.jar
```

在你的情况下,似乎是要打开 `com.sun.tools.javac.processing` 包。你可以尝试使用以下命令:

```bash
java --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -jar YourProject.jar
```

请将 `YourProject.jar` 替换为你实际的 Java 项目的 JAR 文件名。这不是最佳的方法。最好的解决方法是查看你的代码,确保它符合模块系统的要求
温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-12-14

您遇到的错误消息表明存在一个模块访问问题,它涉及到Java的内部类 com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors 和其外部类 com.sun.tools.javac.processing.JavacProcessingEnvironment。这个错误通常发生在尝试访问或修改Java编译器环境的发现处理器(discovered processors)属性时,但却受到了模块访问控制的限制。

错误消息:

plaintext复制代码1Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @45addb81

解释:

    Unable to make field private:表示尝试访问或修改一个私有字段。

    com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors 和 com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs:是Java编译器内部使用的类和字段。

    module jdk.compiler does not "opens com.sun.tools.javac.processing":这意味着jdk.compiler模块没有开放com.sun.tools.javac.processing包给未命名模块(在这种情况下是@45addb81,这很可能是您的代码或项目的模块标识符)。

    原因分析:
    这个问题通常是由两个因素引起的:

    模块封闭性:自Java 9引入模块系统后,某些内部API被封装在模块中,默认不允许外部模块访问。

    Lombok版本不匹配:根据您提供的内容,尤其是第[1]条记录提到的,“这个主要是因为lombok版本太低了,匹配不了JDK18”。Lombok是一个库,它通过注解自动化地生成样板代码,可能依赖于特定版本的JDK。

    解决方案:
    针对这个问题,这里有一些建议的解决方案:

    升级Lombok:确保您正在使用的Lombok版本与您的JDK版本兼容。如果您正在使用JDK 18,您可能需要更新Lombok到支持该版本的适当版本。

    检查模块依赖:查看您的构建配置文件(例如pom.xml用于Maven项目),确保所有依赖项都正确无误,并且没有冲突。

    添加必要的模块开放权限:如果您需要访问jdk.compiler模块中的内容,您可能需要在您的模块描述文件中显式申请权限。但是,请注意,这样做可能会违反Java平台的封装规则,应该谨慎使用。

    总结:
    遇到类似的模块访问问题时,首先检查依赖库的版本兼容性,然后仔细审查模块之间的依赖关系。如果问题仍然存在,可能需要进一步调查具体的模块设置和访问权限。

相似回答