메이븐에서 ear 패키지를 만들어 주는 플러그인은 maven-ear-plugin이다.
ear 파일에 포함되어 함께 패키징될 아카이브 모듈들은 <modules> 엘리먼트 하위에 <ejbModule>, <jarModule>, <webModule> 식으로 설정해서 끼워 넣는다.
그런데 xxxModule 설정 옵션을 보자면, 모두가 groupId와 artifactId를 통해서 끼워넣을 모듈을 지정하고 있다. 아무리 찾아봐도 모듈 파일의 경로를 설정하는 건 없다 ! 내가 원하는 건 임의의 경로에 있는 아카이브를 ear에 포함하고 싶은건데.... ㅜ.ㅜ
여기까지만 보면, 메이븐 저장소에 등록된 모듈만 ear에 포함시킬 수 있다는 결론이 나온다. 내가 만든 모듈을 ear에 포함시키고 싶으면 먼저 모듈을 로컬이나 리모트 저장소에 등록해주어야 한다는 거다. 이 무슨 시츄에이션인가?
그러나 저장소에 등록하지 않고 포함시킬수 있는 방법이 있다. 포함되는 모듈의 의존성 scope를 system으로 잡고, 파일의 절대경로를 지정하면 된다.
이렇게 잡아놓고 mvn package를 날리면 저장소에 등록되지 않은 myapp-ejb.jar, myapp-web.war 파일이 ear에 함께 패키징되는 것을 확인할 수 있다.
ear 파일에 포함되어 함께 패키징될 아카이브 모듈들은 <modules> 엘리먼트 하위에 <ejbModule>, <jarModule>, <webModule> 식으로 설정해서 끼워 넣는다.
그런데 xxxModule 설정 옵션을 보자면, 모두가 groupId와 artifactId를 통해서 끼워넣을 모듈을 지정하고 있다. 아무리 찾아봐도 모듈 파일의 경로를 설정하는 건 없다 ! 내가 원하는 건 임의의 경로에 있는 아카이브를 ear에 포함하고 싶은건데.... ㅜ.ㅜ
여기까지만 보면, 메이븐 저장소에 등록된 모듈만 ear에 포함시킬 수 있다는 결론이 나온다. 내가 만든 모듈을 ear에 포함시키고 싶으면 먼저 모듈을 로컬이나 리모트 저장소에 등록해주어야 한다는 거다. 이 무슨 시츄에이션인가?
그러나 저장소에 등록하지 않고 포함시킬수 있는 방법이 있다. 포함되는 모듈의 의존성 scope를 system으로 잡고, 파일의 절대경로를 지정하면 된다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<modules>
<ejbModule>
<groupId>mycom</groupId>
<artifactId>myapp-ejb</artifactId>
</ejbModule>
<webModule>
<groupId>mycom</groupId>
<artifactId>myapp-web</artifactId>
</webModule>
</modules>
</configuration>
</plugin>
.....
......
<dependencies>
<dependency>
<groupId>mycom</groupId>
<artifactId>myapp-web</artifactId>
<version>1.0</version>
<type>war</type>
<scope>system</scope>
<systemPath>${project.basedir}/myapp-web.war</systemPath>
</dependency>
<dependency>
<groupId>mycom</groupId>
<artifactId>myapp-ejb</artifactId>
<version>1.0</version>
<type>ejb</type>
<scope>system</scope>
<systemPath>${project.basedir}/myapp-ejb.jar</systemPath>
</dependency>
.....
</dependencies>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<modules>
<ejbModule>
<groupId>mycom</groupId>
<artifactId>myapp-ejb</artifactId>
</ejbModule>
<webModule>
<groupId>mycom</groupId>
<artifactId>myapp-web</artifactId>
</webModule>
</modules>
</configuration>
</plugin>
.....
......
<dependencies>
<dependency>
<groupId>mycom</groupId>
<artifactId>myapp-web</artifactId>
<version>1.0</version>
<type>war</type>
<scope>system</scope>
<systemPath>${project.basedir}/myapp-web.war</systemPath>
</dependency>
<dependency>
<groupId>mycom</groupId>
<artifactId>myapp-ejb</artifactId>
<version>1.0</version>
<type>ejb</type>
<scope>system</scope>
<systemPath>${project.basedir}/myapp-ejb.jar</systemPath>
</dependency>
.....
</dependencies>
이렇게 잡아놓고 mvn package를 날리면 저장소에 등록되지 않은 myapp-ejb.jar, myapp-web.war 파일이 ear에 함께 패키징되는 것을 확인할 수 있다.
'Build&Deploy > Maven' 카테고리의 다른 글
Maven : 디렉토리를 컴파일 클래스패스에 추가하기 (0) | 2008.10.23 |
---|---|
Maven : war 모듈은 의존성 전이가 안된다 (1) | 2008.10.23 |
Ant와 Maven을 넘어서 (2) | 2008.10.13 |
Maven : 리소스 설정치환 작업은 언제 수행할까? (0) | 2008.10.02 |
Maven : 궁금한 거.... (0) | 2008.10.02 |