Phase, Plugin
메이븐의 페이즈는 여러 플러그인이 동작할 수 있으며. 플러그인을 사용하고자 한다면 아래와 같이 설정한다.
<build>
<finalName>moment</finalName>
<plugins>
<plugin>
<groupId>org.apache.maaven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
해당 플러그인만 사용하고자 한다면 아래와 같다.
mvn groupId:artifactId:version:goal
위와 같은 maven-war-plugin을 사용하고자 한다면
mvn org.apache.maven.plugins:maven-war-plugin:3.0.0:war
하지만 이와같은 방법은 너무 번거롭다 따라서 다음과 같은 방식을 따른다면 아래와 같이 쉽게 사용 가능하다.
규칙
- 가장 최신 버전의 플러그인 실행을 원한다면 version 정보를 제거
- artifactId가 maven-
name
-plugin이나name
-maven-plugin이라면groupId:name:goal
형식으로 사용 가능 - settings.xml에 아래와 같이 정의되어 있다면
name:goal
형식으로 사용 가능하며, 기본적으로org.apache.maven.plugins
,org.codehaus.mojo
를 가지고있다.<pluginGroups> <pluginGroup>groupId</pluginGroup> </pluginGroups>
- 최종적으로
name:goal
형식으로 사용이 가능하다.
로그를 통해 확인해보자
> mvn test
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'activeProfiles' (position: START_TAG seen ...</pluginRepositories>\n
<activeProfiles>... @70:23) @ C:\Users\SDS\.m2\settings.xml, line 70, column 23
[WARNING]
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.prudy:moment:war:1.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-war-plugin is missing. @ line 21, column 15
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building moment Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ moment --- // PROCESS-RESOUCE PHASE
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ moment --- // COMPILE PHASE
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ moment --- // PROCESS-TEST-RESOURCE PHASE
[WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory d:\study\maven\moment\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ moment --- // TEST-COMPILE PHASE
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ moment --- // TEST PHASE
[INFO] No tests to run.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.490 s
[INFO] Finished at: 2016-09-19T19:11:15+09:00
[INFO] Final Memory: 11M/247M
[INFO] ------------------------------------------------------------------------
메이븐의 기본 페이즈와 플러그인
process-resourse
process-resource 페이즈에서는 resource:resources를 실행시킨다, 프로젝트에 설정된 리소스(project.build.resources.*) 하위 모든 파일들을 target/classes에 옮겨준다.
만약 별도 추가적인 resource 디렉토리나, 자바 소스와 함께 특정할 리소스가 같이 있다면 아래와 같이 설정해주면 된다.
<project>
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
...
</build>
</project>
위 설정은 src/main/resources 디렉토리를 설정하고(resouces 수정시 기본 resouce 디렉토리도 추가해주지 않으면 포함되지 않는다)
src/main/java에서 java확장자파일을 제외한 리소스만 포함한다는 뜻이다.
로그중에서는 아래와 같이 확인할 수 있다.
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ moment ---
compile
compile 페이즈에서는 compiler:compile을 실행시킨다, 프로젝트에 설정된 위치(project.build.sourceDirectory) 디렉토리를 하위에 모든 java파일을 target/classes로 컴파일한다. 소스 위치를 변경하고 싶다면 아래와 같이 하면된다.
<project>
<build>
...
<sourceDirectory>src/java/somthing</sourceDirectory>
...
</build>
</project>
플러그인에 대한 설정변경은 아래와 같이 할 수 있다.
<project>
<build>
...
<plugins>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encodeing>utf-8</encodeing>>
</configuration>
</plugin>
</plugins>
...
</build>
</project>
컴파일할 대상 소스의 버전과 컴파일된 소스 파일의 버전, 컴파일 인코딩 방식을 정의한 예제이다.
process-test-resource, test-compile
test관련 페이즈로는 process-test-resouce와 test-compile이 있다.
각각의 플러그인:골
으로는 아래와 같다.
리소스
resouces:testResources
컴파일
compile:testCompile
test
target/test-classes에 컴파일된 단위테스트 클래스를 실행하고 target/surfire에 결과물을 생성한다.
테스트 케이스별로 나누어서 실행하고 싶을땐 아래와 같이 한다.
단건
mvn -Dtest=AllUnitTests test
다건
mvn -Dtest=AllUnitTests,AllIntegrationTest test
빌드시에는 모든 유닛테스트가 정상이 아니거나, 결과가 정상이 아니어도 배포가 필요할때가 있을 수 있다면 아래와 같이 skip하면 된다.
mvn -Dmaven.test.skip=true test
또는 pom.xml에 project.properties.maven.test.skip 프로퍼티를 true로 설정해주면 된다.
테스트가 실패하더 빌드가 되길 원한다면 surfire 플러그인 설정은 변경해야한다.
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surfire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
...
package
컴파일된 바이너리 파일과 리소스를 형식에 맞춰 압축한다.
mvn package
패키지 네이밍은 아래와 같은 규칙으로 생성된다.
- build.finalName 이 있을 경우
- ${finalName}.${packaging}
- build.finalName이 없는 경우
- ${artifactId}-${version}.${packaging}
install/deploy
여기서 배포는 실 서버의 배포를 뜻하진 않는다.
mvn install
mvn deploy
- install : 로컬저장소에 배포한다.
- deploy : 외부저장소에 배포한다, 다른 배포된 디펜던시를 받아 쓸 수 있다.
상세 설정 방법은 구글에서 찾아볼 것!
clean
보통은 IDE에서 auto building 기능을 통해 자동적으로 수정된 파일을 교체해주지만 잘 안되는 경우 clean페이즈를 통해서 빌드 결과물을 제거할 수 있다.
mvn clean
'소프트웨어 > Maven' 카테고리의 다른 글
[Build/Maven] 소개 (0) | 2016.12.02 |
---|