Intellij에서 Mybatis의 mapper xml 파일을 java 폴더 하위에 둔 프로젝트 실행
Intellij에서 java 폴더 하위의 리소스 파일 복사
IntelliJ를 사용할 때 xml 파일이 mapper 인터페이스와 같은 패키지에 있으면 MyBatis가 같은 이름의 xml파일을 자동으로 찾아서 사용하지만 IntelliJ에서 디버깅할 때 xml파일이 'src/main/java' 폴더 아래에 있으면 찾지 못한다. 반드시 아래 그림과 같이 'src/main/resources' 폴더에 mapper package와 같은 경로를 만들어서 xml 파일을 넣어놓도록 하자. 'src/main/java' 폴더 아래 mapper 패키지에 xml파일을 넣어놓으면 찾지 못하고 예외가 발생한다. 양쪽 어디에 있건 Jar로 묶어 놓으면 같은 package에 들어가게 되지만 IntelliJ에서 디버깅할 때 만큼은 다르게 인식되는 것 같다. Intellij
mybatis의 mapper xml 파일을 기본 리소스 폴더인 'src/main/resources'에 두지 않고, 'src/main/java' 폴더 하위에 두면 Intellij의 경우 java 폴더
gradle을 통한 build 시 build 폴더에 class 파일들이 생성되고, intellij을 통한 build 시 out/production/classes 폴더에 class 파일들이 생성된다. sts(eclipse)는 build 시 target/classes 폴더에 class 파일들이 생성된다.
sts는 build 시 class 파일을 생성하면서 target/classes 하위에 java 폴더 하위에 있는 xml 파일 등의 리소스가 다 복사된다. 그러나 intellij의 경우 build 시 out/production/classes 폴더에 class 파일들만 생성되고 java 폴더 하위의 리소스 파일들이 복사가 안 된다.
그래서 mybatis의 mapper xml 파일들을 java 폴더 하위에 두면 sts에서의 application 실행은 잘 되는데, intellij에서의 실행은 에러가 발생한다.
mybatis mapper xml 파일을 java 폴더에 두고 Intellij에서 실행하기 위해서는 다음과 같이 설정을 해줘야 한다.
- gradle 설정(build.gradle)
dependencies { ... sourceSets { main { resources { srcDirs = ["src/main/java", "src/main/resources"] } } } }
- maven 설정(pom.xml)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
위와 같이 설정을 해주면 xml 파일이 복사된다.
사실 jar에 mapper xml파일을 포함시키기 위해서는 위와 같은 설정이 필요하다. 그리고 src/main/java만 resources에 등록을 하게 되면 기본으로 설정되는 src/main/resources가 포함되지 않기 때문에 application.properties와 같은 중요한 설정 파일이 포함되지 않는다.