인텔리제이로 Maven 멀티 모듈 만드는 방법을 공유드립니다. 생성부터 빌드까지 순서대로 소개하겠습니다.
메이븐 멀티모듈 프로젝트 만드는 방법 및 빌드
1. 프로젝트 생성하기
인텔리제이 File 탭에서 새로운 Maven 프로젝트를 생성합니다.
2. 생성된 프로젝트 확인
메이븐 프로젝트가 생성되면 좌측 사진과 같은 디렉토리 구조로 프로젝트가 자동으로 생성됩니다. .idea 폴더는 프로젝트관련 프로젝트 설정정보이고 아래 src 디렉토리에 main과 test로 나눈 기본적인 메이븐 프로젝트의 디렉토리 구조를 확인할 수 있습니다.
우측은 pom파일입니다. pom파일은 프로젝트 관련 메타정보와 빌드시 참고하는 설정정보입니다. 현재 보이는 프로젝트를 최상위 프로젝트로 하위 모듈들을 만들어 추가할 예정입니다.
3. 하위 모듈 생성하기
새로운 모듈들을 적당한 이름으로 생성합니다. 저는 sub-module-1,2,3으로 총 세번 모듈을 생성했습니다.
4. 생성된 하위 모듈 확인
원래 좌측의 디렉토리 구조였는데, 하위 모듈들을 추가하면 우측과 같은 디렉토리 구조를 가지게 됩니다. 우측 사진을 최상단에 루트 프로젝트의 pom파일이 있고 하위 프로젝트들도 Maven 프로젝트이기 때문에 당연하게도 각 모듈 안에도 pom파일이 들어있는 것을 확인할 수 있습니다.
5. 멀티 모듈 설정하기
인텔리제이로 하위 모듈을 추가하면 인텔리제이가 자동으로 루트 프로젝트의 pom파일을 수정 및 추가해서 멀티모듈 프로젝트 설정을 완료합니다. 따라서 별도로 멀티모듈을 위한 설정을 할필요는 없지만, 어떤 부분이 바뀌는지는 한번 알아보도록 하겠습니다.
자동으로 설정해주는 부분은 두가지입니다. 먼저 루트 프로젝트의 pom파일의 packaging 타입이 자동으로 pom으로 지정됩니다.
<packaging>pom</packaging>
packaging 태그 올 수 있는 값은 war, jar, pom 세가지 입니다. war나 jar는 pom파일을 참고하여 build 타입을 결정하지만, pom은 하위 모듈들을 포함하는 컨테이너 역할을 하는 pom 파일이라는 의미를 가집니다.
그래서 어떤 pom 파일의 패키징 타입이 pom이면, 그 pom 파일과 같은 디렉토리 레벨에 있는 모듈들은 루트 프로젝트에 포함된 하위 모듈이라는 의미라고 이해하면 됩니다.
<modules>
<module>sub-module-1</module>
<module>sub-module-2</module>
<module>sub-module-3</module>
</modules>
등록한 하위모듈들도 자동으로 추가되는 것을 확인할 수 있습니다.
인텔리제이와 같은 개발툴을 사용하지 않고 멀티 모듈을 만든다면 자동으로 설정된 부분을 직접 입력해주거나 maven 명령어를 통해 설정할 수 있습니다.
// 루트 프로젝트의 pom파일
...
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>project-maven-1</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>sub-module-1</module>
<module>sub-module-2</module>
<module>sub-module-3</module>
</modules>
...
</project>
packaing 타입에 pom으로 지정된 것 그리고 modules 태그에 각 하위 모듈 이름이 지정된 것을 확인할 수 있습니다.
여기까지 하면 위와 같은 구조를 가진 메이븐 멀티모듈 프로젝트가 완성됩니다. 다음으로 이렇게 만든 멀티모듈 프로젝트가 정상적으로 빌드되는지 확인해보겠습니다.
5. 빌드하기
정상적으로 빌드되는 것을 확인할 수 있습니다. (빌드는 터미널에서 메이븐 명령어 또는 인텔리제이 메이븐 플러그인등 다양한 방법으로 실행할 수 있습니다.)
디렉토리에서보면 정상적으로 target 디렉토리로 패키징된 것을 확인할 수 있습니다.
'Skills (스터디) > Java' 카테고리의 다른 글
[Java] Reflection 기본개념 및 동작원리 (0) | 2024.09.15 |
---|---|
[JAVA] Thread 기본개념 - 선언방법 2가지 예시코드와 특징비교 (0) | 2023.04.09 |
[Java] parallelStream() 메서드 사용시 예상되는 문제점 및 해결방안 [2] (0) | 2023.02.26 |
[Java] parallelStream() 메서드 사용시 예상되는 문제점 및 해결방안 [1] (0) | 2023.02.26 |
[Java] Checked Exception vs Unchecked Exception 차이점 (1) | 2022.12.04 |
최근댓글