NoSuchMethodError JPQLSerializer.getConstantToAllLabels()Ljava 오류 (해결)
계기
Querydsl 을 사용하면서 테스트를 돌려봤는데 이런 에러가 발생했습니다. NoSuchMethodError JPQLSerializer.getConstantToAllLabels()Ljava 라는 에러인데 처음엔 검색에도 안나왔지만 stackoverflow 에서 간신히 해결방법을 찾았습니다.
원인
원인은 생각보다 간단했습니다. 라이브러리에서 Querydsl 의 버전이 달라서 생긴 에러였습니다.
maven 에서 Querydsl 의 dependecy 를 걸을 때 평균적으론 이렇게 합니다. 사이트에서 이렇게 나오기때문이죠!
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.3.1</version>
</dependency>
<build>
<plugins>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
근데 이렇게 version 을 명시해주니 Querydsl 을 사용하는 사용자 입장에선 버전이 다르니 헷갈리기시작합니다. plugin의 Querydsl 1.1.3 버전에 맞춰서 dependency 의 querydsl 버전도 맞춰줘야하는데 둘의 버전을 맞춰주지못해서 에러가 발생했습니다. 그러면 어떻게 해야할까요????
해결방법
사실 뭐.. 해결방법이라고 할 것도 없습니다. plugin이 알아서 버전을 맞춰주게 해주는 것이죠
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<build>
<plugins>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
비록 버전은 낮아졌지만 에러는 발생하지않았습니다 해결완료!