1. 개요
프로젝트 진행시 초기에는 하나의 프로젝트만으로 개발하다가 규모가 커지거나 새로운 기능을 요구하는 경우에는 프로젝트를 분리하게 되는데, 이때 모듈 구조를 사용한다.
메이븐 모듈 방식을 사용하면 하나의 프로젝트가 어려개의 모듈을 가지고 여러개의 프로젝트(모듈)을 한번에 빌드할 수 있게 된다.
2. 개념
1) 상속
메이븐에서 모든 설정 파일은 최상위 pom.xml 파일을 상속하고 있다.
최상위 pom.xml 의 정보를 출력하기 위해서는 아래와 같은 명령어를 사용한다
$ mvn help:effective-pom
이렇게 기본으로 최상위 pom.xml 을 상속하듯이 프로젝트에서 공통으로 사용하는 설정은 공통 pom.xml 파일을 만들어 관리하고, 하위 모듈에서 이 pom.xml 파일을 상속 할 수 있다.<!-- 부모 POM 파일 예제 --> <project> <modelVersion>1.0.0</modelVersion> <groupId>com.mycorp</groupId> <artifactId>parent</artifactId> <packaging>pom</packaging> <!-- packaging 엘리먼트 값을 'pom'으로 설정 --> <version>1.0-SNAPSHOT</version> . . .이때 위의 설정처럼 부모 pom.xml 파일의 packaging 태그 값은 'pom'으로 설정 하여야한
다. 자식 pom.xml 파일은 <parent/> 엘리먼트를 이용하여 부모 pom.xml 파일을 상속한다
<!-- 자식 POM 파일 예제 --> <project> . . <parent> <artifactId>parent</artifactId> <groupId>com.mycorp</groupId> <version>1.0-SANPSHOT</version> </parent> . . </project>모듈 구조는 일단 이러한 식으로 구성된다.
파일 tree로 보자면 일반적인 모듈 구조는 아래와 같다.
parent
├── batch
│ ├── src
│ └── pom.xml
├── core
│ ├── src
│ └── pom.xml
├── web
│ ├── src
│ └── pom.xml
└── pom.xml
일단 최상위 디렉토리인 parent에 부모 pom.xml 파일이 있다. 이를 위에서 예로 든 것처럼 batch, core, web 의 3개의 모듈의 pom.xml에서 상속하고 있다.2) 집합
느낌상으로 알겠지만 core 모듈은 batch 와 web 모듈에서 공통적으로 쓰이는 클래스를 제공한다. 다시말해 각각 batch와 web은 core 모듈에 의존성이 존재한다.
한마디로 web을 빌드하려면 core -> web 순으로 빌드되어야 하고, batch를 빌드하려면 core -> batch 순으로 빌드가 되어야 하는것이다. 이런식으로 빌드가 되게 하기 위해 부모 pom.xml 파일은 아래와 같이 작성되어야 한다.
<project> <modelVersion>1.0.0</modelVersion> <groupId>com.mycorp</groupId> <artifactId>parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <id>web-build</id> <module>core</module> <!-- 모듈 목록을 등록한다 --> <module>web</module> </modules> <modules> <id>batch-build</id> <module>core</module> <!-- 모듈 목록을 등록한다 --> <module>batch</module> </modules> . . .각각 id로 구분하여 빌드해야할 모듈 목록을 등록한다. mvn 명령어로 빌드시에, 위에 설정된 대로 id값을 빌드파라메터로 전달하면, 해당 id를 가진 모듈들이 위에서부터 아래로 순서대로 빌드 된다.
다시 정리하자면, 하나의 프로젝트가 여러 모듈로 분리될 경우, 모듈간에 의존관계가 발생하므로 빌드를 개개의 모듈별로 진행하면 빌드가 실패할 수 있다. 따라서 여러 모듈을 빌드할때 같은 단위로 빌드 할 수 있도록 하는 기능이 '집합' 이다.
예를들어 web 프로젝트를 빌드하고 싶다면 아래와 같이 빌드한다!
$ mvn -P web-build clean package
modules 추가하고 메이븐 빌드 하면.. 에러가납니다...
답글삭제