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

Pat*_*ner 2 java module intellij-idea java-platform-module-system java-9

我将我的项目使用的SDK升级到Java 10.以下import语句导致错误:

import javax.annotation.PostConstruct;

包'javax.annotation'在模块'java.xml.ws.annotation'中声明,但模块'application'不读取它

在此输入图像描述

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

在此输入图像描述

我选择Add Maven Dependency...了以下依赖项添加到pom.xml中.

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

所以我添加requires java.annotation到module-info.java.

module application {
    requires java.annotation;
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

Intellij正确导航到JAR:

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

有关如何解决此问题的任何想法?我需要能够将模块java.annotation提供给模块,application并且从我在这里这里以及此处此处阅读的方法来实现它是通过向模块路径添加JAR,以及我在这里阅读的新内容必须通过module-info.java中的指令引用添加的模块.

Shi*_*per 5

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

细节步骤:

添加Maven依赖项:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

module-info依赖:

requires java.annotation;
Run Code Online (Sandbox Code Playgroud)

就像你已经做的那样.

然后,停止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" /> -->
Run Code Online (Sandbox Code Playgroud)

IntelliJ将停止观看java.xml.ws.annotation.重新启动后,一切都会好起来的.