以下是intellij中的错误显示,但在maven中它是相同的:
[34,14] cannot find symbol
[ERROR] symbol : method lookup()
[ERROR] location: @interface javax.annotation.Resource
[ERROR] -> [Help 1]
我的pom包含了这样的权利:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
</dependency>
这导致查找方法,未找到Resource annoation。
答案 0 :(得分:1)
我认为这是一个类加载问题。 JDK类将首先加载到类路径中的任何其他类之前。如果要覆盖它,则有标准的endorsed lib机制。尝试将API JAR复制到JDK主页的/lib/endorsed
。
答案 1 :(得分:1)
Java EE有一些随JDK一起提供的不同版本的API。
为了克服这个问题,有“认可API”的概念。
Java SE 7列出了“Java平台的通用注释”作为认可的API:http://docs.oracle.com/javase/7/docs/technotes/guides/standards/
由于某种原因,Java SE 8不再将“Java平台的通用注释”列为已认可的API,但仍支持AFAIK(文档错误?):http://docs.oracle.com/javase/8/docs/technotes/guides/standards/
但请注意,已弃用的API概念已被弃用,可能不再适用于Java SE 9:https://www.java.com/en/download/faq/release_changes.xml
它可能会被Jigsaw模块取代。
不幸的是,似乎没有任何迁移路径,因此您现在必须使用支持的API概念,即使它已被弃用。
以下是NetBeans生成的内容(略有修改):
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
...
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${endorsed.dir}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-endorsed-api</artifactId>
<version>7.0</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
当然,您的应用程序服务器还需要指定已签名的目录,但对于大多数应用程序服务器,这通常应该是开箱即用的。
[34,14] cannot find symbol [ERROR] symbol : method lookup() [ERROR] location: @interface javax.annotation.Resource [ERROR] -> [Help 1]
也就是说,自Java SE 7以来,JDK版本支持Resource#lookup(),所以我猜你使用的是较小的JDK版本。
请注意,如果您使用的是Oracle的JDK / JRE版本,则Java SE 8是唯一仍受支持的版本。所有其他版本都达到End of Life,如果您需要更新错误/安全性,则需要与Oracle签订支持合同。
如果是这种情况,我强烈建议尽可能升级到Java SE 8。