Notice
Recent Posts
Recent Comments
Dharma
[Maven] 다중 프로젝트 세팅 방법 본문
프로젝트를 만들다 보면 너무나 당연하게 디펜던시를 가지는 프로젝트가 생기게 됩니다. 메이븐은 기본적으로 디펜던시를 가져다가 프로젝트를 만들게 되는데 이를 수동으로 해야할 필요가 생긴다면 어떻게 할 것인가? 하는 문제가 있습니다. 즉
A : 실행파일이 만들어지는 프로젝트
B : A 가 참조하는 프로젝트
C : B 가 참조하는 프로젝트
A -
- B -
- C
이런식으로 아마 만들어지는 것이 지금까지의 일반적인 방법일 것입니다. 그러나 메이븐에서 관리를 하게 된다면 조금 다른 식이 됩니다.
P (parent) 가 존재해서
P - A
- B
- C
같은 식으로 프로젝트가 존재하게 됩니다. 그리고 각각은 pom.xml 만 수정해서 프로젝트를 관리할 수가 있습니다.
그래서 수정해야 할 부분을 따라하기로 만들어 보기로 합니다.
1. 부모 (parent) 프로젝트 생성
$ mvn archetype:generate
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 186: 186
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 6
Define value for property 'groupId': : upper
Define value for property 'artifactId': : top
Define value for property 'version': 1.0-SNAPSHOT: : 1.0.0
Define value for property 'package': upper: :
Confirm properties configuration:
groupId: upper
artifactId: top
version: 1.0.0
package: upper
Y: : Y
186 번을 선택하시고 나머지 것들은 대충 입력해서 만들어 줍니다. 제 경우에는
groupId: upper
artifactId: top
version: 1.0.0
와 같이 만들어 줬습니다.
2. 부모 프로젝트의 pom.xml 변경
<groupId>upper</groupId>
<artifactId>top</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<packaging> 태그의 내용을 pom 으로 바꿉니다.
3. 하위 프로젝트 생성
1. 에서 생성한 프로젝트의 위치로 이동합니다.
$ cd $PARENT-BASE
$ mvn archetype:generate
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 186: 186
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 6
Define value for property 'groupId': : upper
Define value for property 'artifactId': : project-a
Define value for property 'version': 1.0-SNAPSHOT: : 1.0.0
Define value for property 'package': upper: :
Confirm properties configuration:
groupId: upper
artifactId: project-a
version: 1.0.0
package: upper
Y: : Y
다음 프로젝트 생성
$ mvn archetype:generate
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 186: 186
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 6
Define value for property 'groupId': : upper
Define value for property 'artifactId': : project-b
Define value for property 'version': 1.0-SNAPSHOT: : 1.0.0
Define value for property 'package': upper: :
Confirm properties configuration:
groupId: upper
artifactId: project-b
version: 1.0.0
package: upper
Y: : Y
그리고 다음 프로젝트도 생성해줍니다.
$ mvn archetype:generate
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 186: 186
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 6
Define value for property 'groupId': : upper
Define value for property 'artifactId': : project-c
Define value for property 'version': 1.0-SNAPSHOT: : 1.0.0
Define value for property 'package': upper: :
Confirm properties configuration:
groupId: upper
artifactId: project-c
version: 1.0.0
package: upper
Y: : Y
각각에 맞춰서 생성해줍니다.
이렇게 하면 자동으로 부모 프로젝트의 pom.xml 이 변경됩니다.
<modules>
<module>project-a</module>
<module>project-b</module>
<module>project-c</module>
</modules>
하단에 위와 같은 내용이 추가 됐습니다. 그리고 project-a 의 pom.xml 을 열어보면
<parent>
<groupId>upper</groupId>
<artifactId>top</artifactId>
<version>1.0.0</version>
</parent>
와 같은 보통때는 안보이는 내용이 추가 됐습니다. 다시 자세히 설명하자면 부모 프로젝트의 <package> 내용을 pom 으로 바꾸고 <modules> 내용을 추가하고 , 추가되는 프로젝트의 pom.xml 에 <parent> 관련된 부분을 추가 해주면 복합 모듈 프로젝트로 변경되는 것입니다.
.
├── pom.xml
├── project-a
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── upper
│ │ └── App.java
│ └── test
│ └── java
│ └── upper
│ └── AppTest.java
├── project-b
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── upper
│ │ └── App.java
│ └── test
│ └── java
│ └── upper
│ └── AppTest.java
├── project-c
│ ├── pom.xml
│ └── src
│ ├── main
│ │ └── java
│ │ └── upper
│ │ └── App.java
│ └── test
│ └── java
│ └── upper
│ └── AppTest.java
└── src
├── main
│ └── java
│ └── upper
│ └── App.java
└── test
└── java
└── upper
└── AppTest.java
31 directories, 12 files
프로젝트의 트리 내용입니다.
4. 하위 프로젝트 끼리 연결 시키기
project-b 는 project-c 를 참조하고 project-a 는 project-b 를 참조합니다. 그렇다면 각각의 project-a 와 project-b 의 pom.xml 을 열어서
project-a 의 pom.xml 에는
<dependency>
<groupId>upper</groupId>
<artifactId>project-b</artifactId>
<version>1.0.0</version>
</dependency>
을 추가해 주고
project-b 의 pom.xml 에는
<dependency>
<groupId>upper</groupId>
<artifactId>project-c</artifactId>
<version>1.0.0</version>
</dependency>
만 추가해 주면 됩니다. 물론 이 내용들은 <dependencies> 태그 안에 위치해야 하는 것은 기본입니다.
결론적으로 말해서 maven 은 초기의 거리낌이 느껴지는 것과는 달리 순수하게 command-line 으로 관리할 수 있는 프로젝트 관리 모듈입니다. 저 같이 이클립스보다는 이맥스(emacs) 가 손에 익은 사람들이 자바 프로젝트를 깔끔하게 관리할 수 있게 많은 기능들을 제공합니다.