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

Posted

技术标签:

【中文标题】import javax.annotation.* 无法在 Eclipse 的 Java 10 编译器中解析【英文标题】:import javax.annotation.* cannot be resolved in Eclipse's Java 10 Compiler 【发布时间】:2019-01-08 20:30:33 【问题描述】:

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

以前 IF 我将 Eclipse 设置为:

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

如果我使用以下 Spring 代码

import javax.annotation.PostConstruct;
...
...
...
@PostConstruct
...
...

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

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

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

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

The import javax.annotation.PostConstruct cannot be resolved

这个错误也会发生@PreDestroy注解上。

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

谢谢。

【问题讨论】:

更改设置后是否在 Eclipse 中清理了项目? 不,我不知道怎么做,我是初学者,怎么做? 单击Project > Clean... 不确定它是否能解决您的问题,但当 Eclipse 找不到我的导入时,它在 99% 的情况下对我有用。 我确实清理了它,但错误仍然存​​在 【参考方案1】:

您可以将接口InitializingBeanDisposableBean 添加到您的类中。 然后你可以使用methods:afterPropertiesSet()destroy()

【讨论】:

【参考方案2】:

缺少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>

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

javax.annotation-api-1.3.2.jar 添加到您的类路径中。它也适用于 JDK 10。 要更清楚地了解替代方法,请通过以下视频链接:

https://www.youtube.com/watch?v=jOYSRwwMLX8&list=PLzS3AYzXBoj9IBdtgXRSyZEwlU2QV-mGG&index=6

【讨论】:

【参考方案6】:

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

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

【讨论】:

问题是这个项目没有使用 Maven,手动下载 jar,目前我想这样做,还有其他选择吗?这是一个 Eclipse 错误还是只是 Java 10 没有附带javax.annotation 如果我理解正确的注释从 Java 9+ 中被弃用并且 Spring 默认看不到它。也许您可以尝试安装 Spring 5.1(似乎即使使用 Java 11 也可以运行 - github.com/spring-projects/spring-framework/wiki/…) 这仍然在 Tomcat 中引起了我的问题,所以我只需要回到 java 8 就解决了我的问题。

以上是关于import javax.annotation.* 无法在 Eclipse 的 Java 10 编译器中解析的主要内容,如果未能解决你的问题,请参考以下文章

spring 容器初始化 bean 和销毁前所做的操作

javax.annotation.Nonnull 与断言

Resource注解无法导入依赖使用javax.annotation的注解类

Java EE 6 @javax.annotation.ManagedBean 与 @javax.inject.Named 与 @javax.faces.ManagedBean

javax.annotation 在哪里

proguard 注意:库类的重复定义 [javax.annotation.PostConstruct]