javax.annotation classes and Java 11 JDK

Sviatlana :

I am migrating from Java 8 to Java 11 and faced the problem. I should use:

  • maven-compiler-plugin 2.5.1 with target 1.8 (compiling WAR in java8)
  • tomcat9
  • Open JDK 11

But on startup gettings constant error:

Post-processing of merged bean definition failed; nested exception is java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

I found multiple ways to fix it. Tried to add dependency:

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

tried to add extention:

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

Nothing of these helped.

This is maven-compiler-plugin config:

    <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>

Please help to find the solution!!

Sviatlana :

For me the problem was in a conflict between libs: javax.annotations-api^1.3.2 and jsr250-api:1.0. There is a javax.annotation.@Resource annotation in jsr250-api WITHOUT lookup() method! On some running environments jsr250's @Resorse was loaded first, on others - javax.annotations-api's. In the first case my error took place:

Post-processing of merged bean definition failed; nested exception is java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

Solving: get rid of one of libs using maven exclusion.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=122421&siteId=1