Issue
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!!
Solution
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.
Answered By - Sviatlana
Answer Checked By - Mary Flores (JavaFixing Volunteer)