导入javax.annotation。*在Eclipse的Java 10编译器中无法解析

xco*_*ode 7 java eclipse spring spring-mvc

在我的机器(Windows 10)中,有两个Java版本,Java 1.8(JRE和JDK)和Java 10(JRE和JDK)。

以前,如果我将Eclipse设置为:

  • Java编译器(JDK兼容):1.8
  • Java构建路径(JRE系统库):1.8

如果我使用以下Spring代码,则

import javax.annotation.PostConstruct;
...
...
...
@PostConstruct
...
...
Run Code Online (Sandbox Code Playgroud)

一切正常。完全没有错误。

但是,如果我将Eclipse设置为:

  • Java编译器(JDK兼容):10
  • Java构建路径(JRE系统库):10

现在,该import语句抛出一条错误消息:

The import javax.annotation.PostConstruct cannot be resolved
Run Code Online (Sandbox Code Playgroud)

而这个错误也发生@PreDestroy注释了。

为什么会这样呢?Java 10会发生什么?如果我仍想将Java编译器和JRE系统库版本保留为Java 10,如何解决此问题?

谢谢。

Ann*_*ker 13

您可以尝试将注释依赖项添加到pom.xml中,以便它们可用于Spring:

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

  • 如果我理解Java 9+不赞成使用正确的注释,那么Spring默认不会看到它。也许您可以尝试安装Spring 5.1(似乎它甚至可以在Java 11上运行-https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-5 。X) (2认同)

小智 8

您需要通过 Window -->Preferences-->Java 将 Eclipse 指向 Java 8 并添加 JDK 1.8 bin 路径。完成后,项目将自动构建,问题应该得到解决。


小智 6

发生这种情况是因为 @PostConstruct 和 @preDestroy 在 java 9 中已被弃用,所以最好不要使用它们,而是使用接口来解决这个问题


Use*_*ser 5

丢失的Javax Annotation

https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2

jar 或依赖项可以在这里找到。

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