본문 바로가기
Framekwork/SPRING

[스프링부트] Maven Querydsl 설정 및 의존성 추가 (java: cannot access javax.persistence.entitymanager)

by 아이엠제니 2024. 3. 8.

 


 

 

 

사용부터 난관이었던 Querydsl...

스프링부트 버전이나 자바 버전에 따라서 사용 방법이 꽤나 달라지는 것 같았다.

회사에서 진행하는 프로젝트의 버전은 2.X 였는데, 집에 와서 내가 테스트하려고 생성한 프로젝트는 3.X 였다.

그리고 자바 버전도 달랐다.

현재 내가 집에서 테스트를 해보려고 세팅한 스프링부트랑 자바 버전은 이러하다.

 

 

 

Spring Boot 버전 & Java 버전
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
        <java.version>17</java.version>
    </properties>

 

 

  • Spring Boot는 3.2.3
  • Java는 17

 

 

 

기존 QueryDSL 의존성 설정
<dependencies>
		<!-- QueryDSL -->
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>5.0.0</version>
        </dependency>
</dependencies>

<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>
            <dependencies>
                <dependency>
                    <groupId>com.querydsl</groupId>
                    <artifactId>querydsl-apt</artifactId>
                    <version>${querydsl.version}</version>
                    <classifier>jakarta</classifier>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

기존에 QueryDSL 의존성을 추가할 때는 위와 같이 추가를 했고, 플러그인도 추가를 했다.

 

 

 

Error..도 아닌 이것
javax.persistence.Entity
java: cannot access javax.persistence.entitymanager

 

구글링 하면서 이것저것 따라 하다가, 실행만 하면?

이렇게 뜨며 진행이 안 되었다.

딱히 에러라고 뜨는 것도 아니었지만, 실행이 안 되니...

그것이 에러...

 

 

해결..?인 줄 알았더니, 해결 아닌...

그렇게 하이에나처럼 구글링을 하던 중?

Github에서 무언가를 발견해서 적용을 했다.

# QueryDSL
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>${querydsl.version}</version>
        <classifier>jakarta</classifier>
    </dependency>

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>${querydsl.version}</version>
        <scope>provided</scope>
        <classifier>jakarta</classifier>
    </dependency>

 

참고: https://github.com/querydsl/querydsl/issues/3493

 

Querydsl 의존성 추가한 부분에서!

<classifier>jakarta</classifier>

위 내용을 추가하는 것이다.

하지만 이것도 해결 방법은 아니었다....

 

 

드디어 해결!!! 👻👻👻

참고: https://kimjingyu.tistory.com/entry/QueryDSL-gradle-%EC%84%A4%EC%A0%95

정말 몇 시간 동안 찾아 헤매던 중!!!

드디어 해결이 되었다. (위 블로거님 감사합니다. 👍👍👍)

위에 블로거분이 올려주신 글을 보다가 알게 된 사실.

 

Querydsl-apt-jakarta 버전에서는 atp-maven-plugin이 필요가 없다는 것이었다... (두둥)

 

그러니 dependency는 그대로 두고, plugin에서만 제거를 해주고 실행을 해보면, 감격스럽게도 실행이 된다. (ㅠㅠ)
 

그러니까!

        <!-- QueryDSL -->
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>5.0.0</version>
            <classifier>jakarta</classifier>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>5.0.0</version>
            <classifier>jakarta</classifier>
        </dependency>

 

최종적으로는 위 dependency들만 있으면 되는 거고!

 

 

플러그인에서는 위 내용을 삭제하면 된다는 거다.

정말... 까다로운  Querydsl이지만, 그래도 여러 테이블을 join 할 때는 Querydsl을 사용하면 편한 것 같기도 하고!

회사 프로젝트에서 사용을 하게 되어서, 연습을 할 겸!

집에서 해보고 있는 중이다.

 

다음 포스팅에서는 집에서 혼자 연습을 해 본 코드들을 가져오겠음!

 

 

 

300x250