메이븐의 특징 중 하나는 메이븐이 참조 라이브러리 의존관계를 체계적으로 관리해준다는 것이다. 메이븐이 의존성을 다루는 의존성 관리 메커니즘에는 의존성 전이(Transitive Dependencies)라는 게 있는데,
A가 B에 의존하고 B가 C에 의존한다고 할 때, 즉 A -> B -> C 관계에서 A는 B에 대한 의존관계만 설정하면 메이븐이 알아서 C까지도 가져와서 적절한 스코프에 포함시켜 준다는 것이다.
그러나, B의 type이 war 이면 의존성 전이 메커니즘은 작동하지 않는다.
<dependency>
<groupId>mycom</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
<groupId>mycom</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
그러니까 메이븐이 자동으로 B.war가 의존하는 C.jar를 포함시켜주지 않는다는 얘기다.
게다가 B.war에 포함된 클래스들(WEB-INF/classes) 또한 A의 의존성에 포함되지 않는다. A의 소스가 B.war의 클래스를 참조한다면 컴파일시 에러가 발생할 것이다.
이클립스에서 A프로젝트의 빌드패스에 B 웹프로젝트를 추가하면 이클립스는 B 웹프로젝트의 빌드패스에 포함된 C.jar와 B 웹프로젝트의 클래스들을 A프로젝트에 자동으로 추가해준다.
아쉽지만 메이븐에서는 이게 자동으로 안된다.
'Build&Deploy > Maven' 카테고리의 다른 글
Maven : 자바 소스 폴더 여러 개 설정하기 (0) | 2008.10.23 |
---|---|
Maven : 디렉토리를 컴파일 클래스패스에 추가하기 (0) | 2008.10.23 |
Maven : 저장소에 없는 모듈을 EAR 파일에 포함시키기 (0) | 2008.10.23 |
Ant와 Maven을 넘어서 (2) | 2008.10.13 |
Maven : 리소스 설정치환 작업은 언제 수행할까? (0) | 2008.10.02 |