[英]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.