Intellij:如何为 javax.annotation.PostConstruct 添加 java.annotation 模块

Intellij: how to add java.annotation module for javax.annotation.PostConstruct

我把项目使用的SDK升级到Java10.下面的import语句导致错误:

进口javax.annotation.PostConstruct;

Package 'javax.annotation' is declared in module 'java.xml.ws.annotation', but module 'application' does not read it

按 ALT+ENTER 让 Intellij 修复它,我收到以下选项:

我选择了Add Maven Dependency...,下面的依赖添加到pom.xml。

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

查看新添加的 JAR 的 MANIFEST.MF,我注意到模块的名称是 java.annotation。

所以我将 requires java.annotation 添加到模块-info.java。

module application {
    requires java.annotation;
}

当我按 CTRL+单击 requires java.annotation 时:

Intellij 正确导航到 JAR:

看来我的模块名称是正确的,而且 javax.annotation:javax.annotation-api 可用于我的模块。不幸的是,import javax.annotation.PostConstruct 上的错误并没有消失。为了确认我的模块描述符是否正常工作,我添加了其他指令,并且一切正常。我还添加了指令 requires java.xml.ws.annotation

这使得导入语句错误消失了,但是,当然,这不是一个令人满意的解决方案,因为 java.xml.ws.annotation 已被弃用并标记为删除。

关于如何解决这个问题有什么想法吗?我需要能够使模块 java.annotation 对模块 application 可用,并且从我读到的内容 and and and the way to do it is by adding a JAR to the module path, and from what I've read here 必须通过模块中的指令引用新添加的模块-info.java .

IntelliJ IDEA 的问题在于它知道 JDK/jmods/java.xml.ws.annotation.jmod 中的模块,即使在运行时它会被禁用。 只需在 IntelliJ IDEA 项目结构中的 Java SDK 定义中注释掉 java.xml.ws.annotation jmod。

详细步骤:

添加 Maven 依赖项:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

module-info依赖关系:

requires java.annotation;

就像你已经做过的那样。

然后,停止 IntelliJ IDEA,转到您的 IntelliJ JDK 配置文件(即 C:\Users\YOUR_NAME\.IntelliJ2018\config\options\jdk.table.xml 并注释掉带有 java.xml.ws.annotation.jmod 参考的行:

<!-- <root url="jrt://C:/Java-Training/JDK!/java.xml.ws.annotation" type="simple" /> -->

IntelliJ 将停止查看 java.xml.ws.annotation。 重启后一切正常