Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Maven] Phase와 Goal Computer & Program

Maven의 Phase와 Goal이 분간이 안 간다.

Plugin은 여러개의 Goal을 가지고 있고, 해당 Plugin의 Goal을 실행시키는 것까지는 알겠는데.. Phase는 뭘까?? 처음 들은 생각은.. 모든 Plugin의 Goal 이름을 알고 있을 수 없기 때문에 공용으로 사용하는 Phase 이름을 두는 것으로 생각했다. "package"라는 Phase를 실행하면 pom.xml에 설정된 packaging이 jar인 경우 jar:jar Goal이 실행되지만 war인 경우 war:war Goal이 실행된다.

헌데.. 콘솔에 찍히는 내용을 좀 더 자세히 보니 Phase와 Goal은 차이가 있다. 우선 그 내용부터 보면..

mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building warTest Maven Webapp
[INFO]
[INFO] Id: kr.tuxedocat:warTest:war:0.0.1-SNAPSHOT
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory: D:\workspace\warTest\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running kr.tuxedocat.warTest.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [war:war]
[INFO] Packaging webapp
[INFO] Assembling webapp[warTest] in [D:\workspace\warTest\target\warTest]
[INFO] Processing war project
[INFO] Webapp assembled in[31 msecs]
[INFO] Building war: D:\workspace\warTest\target\warTest.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Dec 24 09:52:07 KST 2009
[INFO] Final Memory: 2M/8M
[INFO] ------------------------------------------------------------------------


mvn war:war
[INFO] Searching repository for plugin with prefix: 'war'.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building warTest Maven Webapp
[INFO]
[INFO] Id: kr.tuxedocat:warTest:war:0.0.1-SNAPSHOT
[INFO] task-segment: [war:war]
[INFO] ------------------------------------------------------------------------
[INFO] [war:war]
[INFO] Packaging webapp
[INFO] Assembling webapp[warTest] in [D:\workspace\warTest\target\warTest]
[INFO] Processing war project
[INFO] Webapp assembled in[47 msecs]
[INFO] Building war: D:\workspace\warTest\target\warTest.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Dec 24 09:55:04 KST 2009
[INFO] Final Memory: 2M/5M
[INFO] ------------------------------------------------------------------------


Phase의 경우는 여러 Goal을 순차적으로 실행시킨 반면, Goal을 실행하면 해당 Goal만 실행하고 끝이 난다. 위의 콘솔 출력 내용을 보면 mvn package 명령으로 Phase를 실행한 경우 resources:resources, compiler:compile, resources:testResources, compiler:testCompile, surefire:test, war:war Goal을 실행한 것을 볼 수 있지만, mvn war:war 명령을 실행하면 war:war Goal만을 실행한 것을 알 수 있다.



정리해보면.. Phase를 실행시키면 처음부터 주어진 Phase 까지의 바인딘된 모든 Goal을 실행시키고, Goal을 실행시키면 해당 Goal만을 실행한다. 다음 두 명령은 동일한 동작을 수행한다.

  • mvn package

  • mvn resources:resources compiler:compile resources:testResources compiler:testCompile surefire:test jar:jar


또한, Phase에 바인딩되는 Goal은 pom.xml의 설정 등에 따라 달라질 수 있다. package Phase의 마지막 골이 jar packaging의 경우는 jar:jar가 되지만, war의 경우는 war:war가 된다.

<project ...>
  <groupId>kr.tuxedocat</groupId>
  <artifactId>warTest</artifactId>
  <packaging>war</packaging>
  <version>0.0.24-SNAPSHOT</version>
  <name>warTest</name>
</project>


덧글

  • 스티븐 2014/05/02 12:31 # 삭제 답글

    정리 잘되어서 개념잡기 좋았습니다..고맙습니다.
댓글 입력 영역

Google AdSense (text/image)