본문 바로가기

개발개발/etc

[intellij] 빌드 시 xml 파일 복사가 안될 때

빌드 시 xml 파일 복사가 안될 때

이클립스(메이븐) 기준으로 갖춰진 환경에서 인텔리제이를 사용하려고 세팅하다가 또 다른 문제점이 발생했습니다. 바로 빌드할 때 xml 파일이 복사가 안된다는 것이었는데요.


이런 문제가 왜 발생하는지 찾아봤더니 프로젝트 구조 상 xml파일은 src/main/resources 하위에 존재해야하는데 지금 프로젝트는 구조가 src/main/java 하위에 각 각 업무별로 패키지를 구분하고 그 하위에 각각 xml이 위치하고 있는 구조이기 때문에 자동적으로 xml 파일이 복사가 안되었습니다.


사실 이 문제는 해결이 간단합니다.

바로 pom.xml에 아래처럼 빌드할 때 포함할 리소스 부분을 추가해주면 되는데요.

(아래 스샷은 fxml로 되어있지만 그 부분만 그냥 xml로 변경하면 됩니다.)


그러면 더 큰 문제가 뭐냐?!

바로 저렇게 xml 파일을 복사하고 서버를 띄우면 xml "mapper name.queryId" already contains ~ 블라블라. 맵퍼가 중복된다는 에러가 뜨는 것이었습니다.


서버를 띄울 때 빌드를 하게 되어있는데 서버 구동 후 target 폴더 이하를 살펴보니 다음과 같은 구조가 되었습니다.


1. target > classes 하위에 빌드된 class와 xml 파일이 존재

2. target > WEB-1.0.0-SNAPSHOT > WEB-INF > classes 하위에 빌드된 class와 xml 파일이 존재

3. target > WEB-1.0.0-SNAPSHOT > WEB-INF > lib > web-xxx.jar 파일 내에 빌드된 class와 xml 존재


우선 서버 구동 시 따로 maven 빌드 옵션을 넣지는 않았습니다.


인텔리제이로 빌드 시 artifacts 라는 이름으로 war가 생성되는 것 같은데 이 때 컴파일이 아마 내장된 메이븐으로 빌드되는게 아닐까 추측해봤습니다. (만약 아니라면 고수분들의 댓글과 의견 감사히 받겠습니다!)


그리고 서버 구동 시 1~3번 중 아마 2, 3번에 해당하는 target > WEB-1.0.0-SNAPSHOT의 내용을 가지고 구동이 되는 것 같은데 문제는 이 스냅샷 폴더 내부에 이미 빌드된 항목들이 존재하고 있고 lib내에 jar파일 내부에도 빌드된 항목이 있어서 중복이 발생하는 것 같았습니다.


그래서 이런저런 옵션을 보다가 Project Structure > Artifacts에 상세 내용을 보니 WEB-INF 하위에 'web' complie output 이라는 항목이 존재하는 것을 발견했습니다. 그리고 lib 하위에 jar 보이고 그 하위에도 똑같이 'web' complie output이 존재하길래 상단에 있는 것을 제거하고 clean 후 서버를 구동해보았습니다.


그랬더니 정상적으로 문제없이 서버가 구동되었습니다 ㅜ_ㅜ

감격의 눈물...... 인텔리제이 설정 맞추느라 거의 2일을 소모했어요....


보안프로그램이 깔린 프로젝트에서 나 홀로 다른 IDE를 쓰자니 여러가지 어려움이 있네요.

하지만 이미 인텔리제이의 편함을 알아버린 이상 이클립스를 쓰는 것은 용납이 안됨니다!!

사실 보안프로그램때문에 초반에 인텔리제이 구동이 안되서 반쯤 포기했다가 다시 되길래 냅다 갈아타려고 다시 세팅을 한겁니다 ㅋㅋ 인텔리제이 입문한지 얼마 되지 않아서 지난번 50%할인 행사를 그냥 다음에 사야겠다 하고 지나쳤는데.. 바보짓을 했네요. 이제 다른 프로젝트 가더라도 인텔리제이를 고집해야 겠다 다짐했습니다.


여러분 모두 인텔리제이 쓰세엽!!! 두 번 쓰세엽!!!!