[英]maven build uses jdk home\src.zip!\javax\annotation\Resource.java not dependency
这是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>
这导致找不到资源注释的查找方法。
我认为这是一个类加载问题。 JDK类将在类路径中的其他任何对象之前首先加载。 如果要覆盖它,则有标准的认可lib机制。 尝试将API JAR复制到您的JDK主页中的/lib/endorsed
。
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
它可能会被拼图模块取代。
不幸的是,似乎没有任何迁移路径,因此,即使已弃用,您现在也必须使用认可的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。 所有其他版本均已终止生命,并且如果您要进行错误/安全更新,则需要与Oracle签订支持合同。
如果是这种情况,我强烈建议您尽可能升级到Java SE 8。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.