2015-10-07 10 views
0

這裏是的IntelliJ錯誤顯示,但它是在行家一樣:Maven構建使用JDK家 src.zip 的javax 註釋 Resource.java不是依賴性

enter image description here

[34,14] cannot find symbol 
[ERROR] symbol : method lookup() 
[ERROR] location: @interface javax.annotation.Resource 
[ERROR] -> [Help 1] 

我POM具有包括像這樣的depedncy:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
</dependency> 

這導致在查找方法,對資源annoation沒有被發現。

+0

請在您的帖子中的文本中發佈堆棧跟蹤,而不是圖像。 – Tunaki

回答

1

我認爲這是一個類加載問題。 JDK類將在類路徑中的其他任何內容之前加載。如果你想覆蓋這個,有標準的endorsed lib機制。嘗試在您的JDK主頁上將API JAR複製到/lib/endorsed

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了一些原因,但據我所知它仍然支持(文檔錯誤?):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] 

這就是說,Resource#lookup()是因爲Java SE 7中的JDK版本不支持,所以我想您使用的是較小的JDK版本。

請注意,如果您使用的JDK/JRE版本從Oracle,Java SE的8仍支持的唯一版本。所有其他版本都達到End of Life,如果您想要錯誤/安全更新,您需要與Oracle簽署支持合同。

如果是這樣,我會強烈建議,如果可能將其升級到Java SE 8的情況。