Using Dojo with Maven 이라는 문서를 살펴보면, Maven 의 pom.xml 파일에 다음과 같은 코드를 추가하여 dojo 코드를 다운받는 예제가 존재한다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack dojo</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.dojotoolkit</groupId>
<artifactId>dojo</artifactId>
<version>${project.version}</version>
<type>zip</type>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/dojo</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
도대체 어떤 일을 하는 것일까? 불행히도 난 Maven을 그냥 가져다 쓰는 수준밖에 되지 않기에 이를 읽기 위해서 executions 에 관한 내용을 찾아 봐야 했다.
About Executions
Maven 프로젝트는 JAR나 WAR와 같은 각각의 Packaging 방법이 존재하며, 해당 Packaging 방법에 따라 진행해 나아가는 작업들의 목록들(Phases) 가 존재한다. 그리고 각 Phase 는 구체적인 작업이 명시되어 있는 Maven-Plugin과 해당 Plugin의 Goal로 정의 된다.
이렇게 Maven에서 정의해 놓은 Lifecycle 에 추가적인 작업을 하고자 할때 “Executions” 요소를 쓴다.
Return to codes
그럼 위의 코드를 읽어보자.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>. . .</executions>
</plugin>
우선 추가적으로 내가 하고 싶은 일은 org.apache.maven.plugins 그룹의 maven-dependency-plugin에 정의 된 Goal 중 하나를 이용하고 싶다는 것이다.
<plugin>
<executions>
<execution>
<id>unpack dojo</id>
. . .
<goals>
<goal>unpack</goal>
</goals>
<configuration>
. . .
</configuration>
</execution>
</executions>
</plugin>
바로 unpack이라는.. (configutation은 maven-dependency-plugin의 실행에 관한 arguments임으로 여기선 생략.)
여기서 주의할 점은 현재 Project의 Life-cycle 에 dependency:unpack 이라는 goal을 실행하는 Phase가 있다면 해당 Phase에서 이 Goal은 실행될 것이다. 하지만 그렇지 않은 경우 어떤 Phase에서 이 작업이 실행되어야 하는지 명시해 주어야 한다.
<plugin>
. . .
<executions>
<execution>
. . .
<phase>generate-sources</phase>
. . .
</execution>
</executions>
</plugin>
이렇게 하면 현재 Project의 Lifecycle 중 “generate-sources”에서 위의 명시한 추가 작업을 수행하게 되는 것이다.
And ..
그럼 마지막으로 maven-dependency-plugin의 unpack 에 대한 설명은…
해당 플러그인 사이트를 참조하도록하자.
Link: maven-dependency-plugin:unpack
CAUTION
- maven-dependency-plugin 에는 실재로 unpack이라는 goal이 존재해야 한다는 사실을 까먹지 말자