簡體   English   中英

javax.annotation 類和 Java 11 JDK

[英]javax.annotation classes and Java 11 JDK

我正在從 Java 8 遷移到 Java 11 並遇到了這個問題。 我應該使用:

  • maven-compiler-plugin 2.5.1 與目標 1.8(在 java8 中編譯 WAR)
  • tomcat9
  • 打開 JDK 11

但是在啟動時不斷出現錯誤:

合並bean定義后處理失敗; 嵌套異常是 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

我找到了多種方法來修復它。 嘗試添加依賴項:

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

嘗試添加擴展名:

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

這些都沒有幫助。

這是 maven-compiler-plugin 配置:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>

請幫忙尋找解決辦法!!

在提前遷移 Java 的 3 個版本時,首先應該考慮的是更新所有主要依賴項。

maven-compiler-plugin -> 當前版本是3.8.1

2.5.1 是 7 歲。

請嘗試以下操作來解決此錯誤:

java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

保持依賴:

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

並將其顯式添加為模塊:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <release>11</release>
        <compilerArgs>
            <arg>--add-modules</arg>
            <arg>java.xml.ws.annotation</arg>
        </compilerArgs>
    </configuration>
</plugin>

對我來說,問題在於庫之間的沖突:javax.annotations-api^1.3.2 和 jsr250-api:1.0。 jsr250-api 中有一個 javax.annotation.@Resource 注釋,沒有 lookup() 方法! 在某些運行環境中,首先加載 jsr250 的 @Resorse,在其他環境中 - javax.annotations-api 的。 在第一種情況下,我的錯誤發生了:

合並bean定義后處理失敗; 嵌套異常是 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

解決:使用 maven 排除擺脫一個庫。

我遇到過同樣的問題。

我添加了這些行,並成功:

<build>
...
        <extensions>
            <!-- Prevents this error, with JDK 13: -->
            <!-- NoSuchMethodError: 'java.lang.String javax.annotation.Resource.lookup()' -->
            <extension>
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
                <version>1.3.2</version>
            </extension>
            <extension>
                <groupId>javax.annotation</groupId>
                <artifactId>jsr250-api</artifactId>
                <version>1.0</version>
            </extension>
        </extensions>
</build>

我正在從 jdk 8 遷移到 jdk 13。我遇到了類似的問題。 但問題是自 jdk 11 以來,打包的 javax 已被棄用並替換為 jakarta 庫。 我正在使用 maven 3.8.4 和 jdk 13。

   <dependency>
        <groupId>jakarta.annotation</groupId>
        <artifactId>jakarta.annotation-api</artifactId>
        <version>1.3.5</version>
    </dependency>
    
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>2.3.2</version>
    </dependency>

我在我的 JDK11 項目中遇到了同樣的問題。

我的解決方案:

@Autowired
@Qualifier("bean's name")

代替:

@Resourse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM