Build Tool/Maven
[Maven] Maven 관례따라 dynamic web project 만들기
시크맥스
2021. 1. 5. 11:16
Dynamic Web Project 생성
File > New > Dynamic Web Project 선택합니다.
프로젝트 이름 입력 > NextSource folders on build path 에서 기본으로 있는 "src"를 삭제합니다.
그리고 "Add Folder" 버튼으로 아래와 같이 Maven 관례에 따라 디렉토리 구조를 만듭니다.
src/main/java
src/main/resources
src/main/webapp
src/test/java
src/test/resources
프로젝트 속성으로 보면 아래와 같은 모습이 됩니다.
Maven Project로 변환
프로젝트 이름 위에서 오른쪽 마우스 클릭 > Configure > Convert To Maven Project
Group Id, Artifact Id, Version을 입력합니다.
입력을 마치면, 새로운 디렉토리가 몇 개 생기고 pom.xml 파일이 생성됩니다.
pom.xml을 열어보면, <build> 에 2개의 plugin이 존재합니다.
하나는 maven-war-plugin 이고 다른 하나는 maven-compiler-plugin
이 중에서 우리가 만들 Dynamic Web Project를 war로 패키징 해주는 plugin이 maven-war-plugin 입니다.
지금 글을 쓰는 시점에서는 2.4 버전이 최신입니다.
Maven 프로젝트 구조의 관례에 따라, 모든 웹 관련 리소스 들은 src/main/webapp에 두게합니다.
그런데 Eclipse에서 Dynamic Web Project를 만들 때에 동일한 역할을 하는 디렉토리가 WebContent입니다.
WebContet를 그대로 써도 되긴 하지만 Maven 관례를 따르는 것이 좋습니다.
그래야 나중에 다른 사람이 봐도 이해하기 쉬우니까요.
pom.xml 파일을 다시보면 maven-war-plugin에 <warSourceDirectory>가 있습니다.
이 값이 현재는 WebContent로 되어 있습니다.
이것을 src/main/webapp로 변경합니다.
그리고 WebContent 하위의 디렉토리와 파일을 src/main/webapp로 복사하고 WebContent는 삭제합니다.
최종 디렉토리 구조는 아래와 같습니다.
Deployment Assembly 설정
이제 마지막으로 확인해야 할 것이 있습니다.
프로젝트 이름위에서 마우스 오른쪽 클릭 > Properties > Deployment Assembly
WebContent 는 위에서 디렉토리를 삭제했기 때문에, 제거합니다.
m2e-wtp/web-resources 도 삭제합니다.
src/main/webapp는 WEB-INF/classes 로 되어 있는 것을 "/"로 변경합니다.
그래야만 src/main/webapp 아래있는 리소스들이 war 패키징될 때에 최상위에 있게 됩니다.
Edit 안된다면 삭제한 후에 "Add..."를 합니다
Maven 실행
먼저 프로젝트를 clean 합니다 (맨 처음 한번 clean을 먼저 실행 해 주는 것이 좋습니다)
프로젝트 이름 위에서 마우스 오른쪽 클릭 > Run As... > Maven clean
프로젝트 이름 위에서 마우스 오른쪽 클릭 > Run As... > Maven install
터미널에서 pom.xml이 있는 곳으로 이동하여
mvn clean install
정상적으로 실행되는지 확인합니다.