maven이란?
🥷
MAVEN
project management and comprehension tool
프로젝트 빌드, 문서관리 등을 합니다.
..
프로젝트 패키징 형식을 바꿔준다거나 프로젝트 구조를
자바, 웹 형식 변경이 되며
컴파일 테스트, 배포 등을 모듈화 하여 자동화시켜서
개발에만 집중할 수 있게 할 수 있습니다.
의존성 관련하여 원래라면 원하는 라이브러리 사이트에 가서
다운로드하면서 버전 확인도 해야 하지만
간편하게 의존성끼리의 버전 확인만 하면 라이브러리들이 추가됩니다.
이마저도 boot를 쓰면 버전도 다 세팅해줍니다.
터미널을 사용해서 이용할 수도 있지만
ide를 이용하여 사용할수도 있습니다.
인텔리 제이나 이클립스를 이용하면 툴에서도 지원을 하여서
쉽게 사용할수있습니다.
phase, goal, lifeCycle
3개가 메이븐의 주요 개념입니다.
build lifeCycle
정의한 페이즈 순서를 라이프사이클이라고 합니다.
기본적으로 각각의 단계(논리적 단계)로 이루어집니다.
default :... -compile -... -test -... -package-... - install-... -deploy ( 빌드 결과물 생성 )
clean : clean ( 컴파일된 내용이 있는 타깃 내용 삭제 )
site : site - deploy ( 프로젝트 문서 사이트 생성 )
🥷
사이사이에 많은 단계들이 있는데
mvn test라고 하면
test 포함하여 전 단계 들을 모두 다 실행하게 됩니다.
위에서 말했지만 메이븐은 플러그인 방식입니다.
각각 단계도 플러그인처럼 되어있어서
탈부착하며 원하는 단계만 넣을 수도 있고 뺄 수도 있습니다.
또 각 플러그인들 안이 단계가 나누어져 있는데
goal이라고도 합니다.
compile : java파일을 class파일로 컴파일 합니다. test : 단위테스트 라이브러리로 테스트를 합니다. 테스트가 실패하면 빌드를 실패합니다. package : 패키징 합니다. install : 로컬환경에 배포를 합니다. deploy : 외부환경에 배포를 합니다. |
phase
빌드 사이클의 논리적 단위
그리고 각각 페이즈에 연결된 플러그인들이 있습니다.
메이븐의 모든 기능은 플러그인을 기반으로 합니다.
아래는 플러그인 리스트입니다.
http://maven.apache.org/plugins/
goal
위에서 말한 플러그인들이 실행할 명령입니다.
mvn [compiler]:[compile]
compiler : phase
compile : goal
[compiler] 플러그인의 [compile] 골을 수행한다
라고 생각하면 됩니다.
maven 간단하게 사용해보기
compile
터미널을 켜줍니다(window - cmd)
그 후 pom.xml의 위치로 이동해야 합니다.
모든 메이븐 명령어는 pom.xml의 위치에서 실행해야 합니다.
mvn compile을 실행 시키면
현재 프로젝트가 컴파일됩니다.
컴파일된 파일의 경로는 ${basedir}/target/classes입니다.
컴파일이 성공적으로 완료되면
target/classes에 java파일들이 class파일들로 변환되어있습니다.
[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.
해당과 같은 에러가 뜰 수 있습니다.
그리고 target/classes에 들어가면
컴파일된 파일들 역시 존재하지 않습니다.
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
위 코드를 pom.xml에 적어줍니다.
다시 메이븐 명령어를 입력하시면 됩니다.
특정 버전의 jdk를 이용하여 빌드할 필요가 있을 시 사용하시면 됩니다.
자바 후속 버전에 나온 기능들이 코드에 들어가 있을 때
그 기능이 포함된 jdk버전을 기입해주시면 될 것 같습니다.
test
mvn test 실행시
src/test/java의 Junit test를 실행합니다.
(단위 테스트 프레임워크 중 하나로 실행한다고 합니다.)
테스트 결과는 target/surefire-reports 폴더에
저장됩니다.
<maven.test.skip>true</maven.test.skip>
pom.xml의 properties태그에
기입 시 테스트 단계는 넘어갑니다.
테스트 관리가 안될 시 사용할 것 같습니다.
*
기본 라이프 사이클이
compile - test - package 순서입니다.
jar나 war로 형식으로 export 하고 싶은데
단위 테스트에서 실패를 할시
compile은 되어서 class파일은 생성되지만
뒤에 있는 pacakage단계는 실행되지 않습니다.
단위테스트 실패 시 터미널에 출력이 됩니다.
Results :
Failed tests: testMethod(package.className)
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
2개의 테스트가 진행되고 1개의 테스트가 실패되었네요.