0
메이븐
파헤치기
김우용
1
메
이
븐
이
란
?
1
살
펴
보
기
2
설
정
파
일
3
라
이
프
사
이
클
4
의
존
성
관
리
5
이
클
립
스
통
합
6
2
메이븐이란?
자바 세상의 빌드를 이끄는 메이븐
1
빌드란?
자바 프로젝트
자바 프로젝트의 빌드를
자동화 해주는 툴
compile
src lib/*.jar
package deploy
빌드(build)
3
메
이
븐
이
란
?
1
살
펴
보
기
2
설
정
파
일
3
라
이
프
사
이
클
4
의
존
성
관
리
5
이
클
립
스
통
합
6
4
살펴보기
메이븐 설치 및 템플릿 프로젝트 생성
2
MAVEN 다운로드
maven.apache.org/download.cgi
binary zip 파일을 다운로드
환경변수 추가
PATH 변수에
MAVEN_HOME/bin 을 추가
정상작동 확인
프롬프트에서 mvn -version
MAVEN 설치
5
살펴보기
메이븐 설치 및 템플릿 프로젝트 생성
2 아키타입(archetype)
메이븐이 제공하는 여러가지 구조의 프로젝트 템플릿
mvn archetype:generate -DgroupId=com.nhnent -DartifactId=helloworld
-DarchetypeArtifactId=maven-archetype-webapp
6
살펴보기
메이븐 설치 및 템플릿 프로젝트 생성
2
mvn [options] [<goal(s)>] [<phase(s)>]
mvn -version
mvn archetype:generate -DarchetypeCatalog=internal
mvn archetype:generate -DgroupId=com.nhnent -DartifactId=helloworld
-DarchetypeArtifactId=maven-archetype-webapp
7
메
이
븐
이
란
?
1
살
펴
보
기
2
설
정
파
일
3
라
이
프
사
이
클
4
의
존
성
관
리
5
이
클
립
스
통
합
6
8
설정파일
설정파일만 있으면 끝! settings.xml와 pom.xml
3
• 메이븐 툴과 관련된 설정을 담당
• MAVEN_HOME/conf/ 에 위치, 사용자별 적용하려면 USER_HOME/.m2/ 에 설정 가능
settings.xml
9
설정파일
설정파일만 있으면 끝! settings.xml와 pom.xml
3 pom.xml
pom
프로젝트
관계설정
groupId, artifactId, version
모듈
상속
의존 라이브러리 관리
프로젝트
기본설정
빌드설정
빌드환경
빌드
소스/테스트 디렉토리
리소스(자원) 디렉토리
플러그인
리포팅(문서화)
프로젝트 이름
프로젝트 URL
프로젝트 참여자
라이센스
빌드할 환경에 따른 정보
프로파일
• 프로젝트 내 빌드설정을 담당
• 프로젝트 최상위에 존재
• Project Object Model
• 다른파일 지정 : mvn –f xxx.xml test
10
설정파일
설정파일만 있으면 끝! settings.xml와 pom.xml
3 pom.xml
• project pom.xml 파일의 최상위 엘리먼트
• modelVersion POM 모델의 버전. 가장 최근 버전이 4.0.0이다. POM 모델이 변경되지
않으면 수정할 필요가 없다.
• groupId 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을
사용한다.
• artifactId 프로젝트를 식별하는 유일한 아이디를 의미한다. 예를 들어 com.nhnent라는 groupId를 사용하고 있는 조직에 여러 개의 프로
젝트가 존재할 수 있다.
• packaging 프로젝트를 어떤 형태로 패키징할지 결정한다. jar, war, ear, pom 등이 해당된다.
• version 프로젝트의 현재 버전이다. 개발이 완료된 버전일 경우 1.0, 2.0 과 같이 사용하겠지만 프로젝트가 개발 중에는 SNAPSHOT을 접
미사로 사용할 수 있다. SNAPSHOT은 메이븐의 예약어이며, SNAPSHOT을 사용한다면 라이브러리를 다른 방식으로 관리한다.
• name 프로젝트 이름
• url 프로젝트 사이트가 있다면 사이트 URL 을 등록한다.
• dependencies <dependencies/> 엘리먼트와 하위 엘리먼트인 <dependency/>는 프로젝트와 의존관계에 있는 라이브러리를 관리한다.
11
설정파일
설정파일만 있으면 끝! settings.xml와 pom.xml
3 pom.xml
• 최상위 pom 설정 파일
• 모든 pom.xml이 기본으로 상속하고 있는 부모 설정파일
• mvn help:effective-pom 으로 내용 확인
• 기본으로 생성된 pom.xml에 별 내용이 없어도 많은 동작을 할 수 있는 이유
• 프로젝트 pom.xml에서 재정의하여 최상위 설정파일의 내용을 덮어 쓸 수 있음
12
설정파일
설정파일만 있으면 끝! settings.xml와 pom.xml
3 pom.xml
• build 프로젝트 빌드와 관련한 기본적인 소스 디렉토리 구조, 빌드 산출
물 디렉토리 구조, 빌드시 사용할 플러그인 정보를 관리한다.
• sourceDirectory 실제 서비스를 담당하는 자바 소스 코드를 관리하는
디렉토리. 기본 값은 src/main/java
• testSourceDirectory 테스트 소스를 관리하기 위한 디렉토리. 메이븐
빌드 툴은 서비스 소스 코드와 테스트 소스 코드를 분리해서 관리하며,
배포 시 테스트 소스 코드가 같이 배포되지 않게 한다. 기본 값은
src/test/java
• outputDirectory sourceDirectory 의 소스를 컴파일한 결과물이 위
치하는 디렉토리. 기본 값은 target/classes
• testOutputDirectory testSourceDirectory 의 소스를 컴파일한 결
과물이 위치하는 디렉토리. 기본 값은 target/test-classes
• resources 서비스에 사용되는 자원을 관리하는 디렉토리. 기본 값은
src/main/resources
• testResources 테스트 시에 필요한 자원을 관리하기 위한 디렉토리.
기본 값은 src/test/resources
• pluginManagement 빌드 설정 파일에서 관리하는 플러그인 목록. 이
엘리먼트에 설정되어 있다고 해서 반드시 사용하는 것은 아니다.
• repositories 빌드할 때 접근할 저장소의 위치를 관리한다. 메이븐 기
본 저장소 URL 은 http://repo1.maven.org/maven2 이다.
13
메
이
븐
이
란
?
1
살
펴
보
기
2
설
정
파
일
3
라
이
프
사
이
클
4
의
존
성
관
리
5
이
클
립
스
통
합
6
14
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4
complie
test
package
install
deploy
clean
site
site-
deploy
기본라이프사이클
celan 라이프사이클
site 라이프사이클
문서 사이트 생성
서버 배포
산출물 생성
로컬 저장소 배포
원격 저장소 배포
15
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4
• 메이븐의 모든 기능은 플러그인을 기반으로 동작
• 페이즈도 플러그인과 연결되어 있다.
• 플러그인에서 실행할 수 있는 각각의 작업을 골(goal)이라고 한다.
• 한 개의 페이즈는 한 개의 골과 연결된다.
• 소스코드를 컴파일하는 complie 골
• 테스트 소스코드 컴파일 testComplie 골
• 도움말 제공 help 골
예) compiler 플러그인
플러그인
16
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4
• 로컬 저장소 내 최신버전을 사용하길 원한다면 버전 생략가능
• maven-$name-plugin 또는 $name-maven-plugin 형식의 artifactId를 사용
한다면 $name만 사용해서 실행 가능
• settings.xml의 플러그인 그룹에 포함된 플러그인이면 groupId 생략가능
• 메이븐 기본 플러그인들이 포함되어 있는 org.apache.maven.plugins와
org.codehaus.mojo는 settings.xml에 없어도 기본으로 설정 됨
플러그인 실행방법
mvn groupId:artifactId:version:goal
예) mvn org.apache.maven.plugins:maven-complier-plugin:2.1:complie
17
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4 페이즈와 골의 연결관계
process-
resources
complie
process-
classes
process-test-
resource
test-complie
test
prepare-
package
package
resource:
resource
complier:
complie
resource:
testResource
complier:
testComplie
surefire:test
war:war
Phases
Goals
18
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4
19
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4• mvn process-resources resources:resoureces의 실행으로 resource디렉터리에 있는 내용을 target/classes로 복사
• mvn complie complier:complie의 실행으로 src/java 및의 모든 자바소스를 컴파일해서 target/classes로 컴파일
• mvn process-testResources, mvn test-complie resources:testResources, complier:testCopile 로 test->target/test-classes
로 복사 나머지 동일
• mvn test surefire:test의 실행으로 target/test-classes에 있는 테스트케이스의 단위테스트들을 실행한다. 그리고 그 결과물을
target/surefire-reports에 생성한다.
• mvn -Dtest=클래스패턴1,클래스패턴2,... test 패턴에 해당하는 클래스의 테스트케이스만 검사
• mvn -Dmaven.test.skip=true test 테스트하지 않고 빌드를 진행한다.
• mvn package target디렉터리 하위에 jar, war, ear등의 압축파일 생성, 이름은 build엘리먼트의 finalName엘리먼트의 값을 사용, 지정
되지 않을 경우 "artifactId-version”의 이름으로 압축됨(각 압축종류별로 플러그인이 필요, 빌드 시 알아서 다운로드함)
• mvn install 로컬 저장소로 배포
• mvn deploy 원격 저장소로 배포
• mvn clean 빌드를 통해 생성된 target디렉터리 삭제
• mvn clean test, mvn clean install 이전 빌드로 인해 남아있는 산출물의 문제로 빌드 오류가 발생하는 경우
• mvn site target/site에 문서사이트 생성
• mvn site-deploy 문서 사이트를 서버로 배포
20
라이프사이클
페이즈, 플러그인, 골.. 메이븐의 내부동작 원리
4
21
메
이
븐
이
란
?
1
살
펴
보
기
2
설
정
파
일
3
라
이
프
사
이
클
4
의
존
성
관
리
5
이
클
립
스
통
합
6
22
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5
하나,
spring 홈페이지
접근
둘,
Spring 라이브러리
다운로드
셋,
압축 해제
넷,
추가/수정할 라이브
러리를 찾아서 복사
기존 라이브러리
관리방법
다섯,
이클립스
클래스패스 수정
23
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5
중앙 저장소
http://repo1.maven.org/maven2
원격 저장소
springsource 저장소
사내 저장소 등
로컬 저장소
USER_HOME/.m2/repository
MAVEN 저장소
24
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5
1. 로컬 저장소 -> 설정한 순서대로 라이브러리를 검색
2. 중앙 저장소(http://repo1.maven.org/maven2/) 에 접근
3. groupId/artifactId/version 에 존재하는 ${artifactId}-${version}.jar 파일을 다운로드
4. 최종적으로 http://repo.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.jar 가 있는지 확인 후 다운로드
25
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5
http://mvnrepository.com
26
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5
Struts2
SpringPROJECT
Hibernate
Apache
Commons
Log4j
의존관계
의존성 전이
• 중앙 저장소에서 다운로드 받을때 *.pom 파일도 같이 받는데 이곳에 의존성 정보가 들어있다.
• 따라서 그 라이브러리를 받으면 그 라이브러리와 의존관계에 있는 라이브러리들도 자동으로 다운로드 받는다.
27
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5 의존성 중개
A B C D2.0
A E D1.0
28
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5 의존성 관리
29
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5 의존성 스코프
• compile 스코프를 설정할지 않았을 때의 기본 스코프이다. 컴파일 시에도 사용되며, 배포 시에도 같이 배포되어야 하는 라이브러리이다.
• provided 예를 들어 servlet.jar는 서블릿 컨테이너에서 제공하므로 컴파일 시점에는 필요하지만, 애플리케이션을 배포할 때 같이 배포될
필요는 없다. 이와 같은 상황에서 사용하는 스코프이다.
• runtime runtime 스코프는 말 그대로 컴파일 시에는 사용되지 않지만 애플리케이션을 실행할 때 사용되는 라이브러리일 경우 설정한다.
• test 테스트하는 시점에만 사용하는 라이브러리에 대한 스코프를 설정할 때 사용한다.
• system system 스코프는 provided와 비슷하다. 단지 우리가 직접 jar 파일을 제공해야 한다. 따라서 이 스코프의 jar 파일은 저장소에서
관리되지 않을 수도 있다.
• import 다른 POM 설정 파일에 정의되어 있는 의존 관계 설정을 현재 프로젝트로 가져온다. 이 범 위는 <dependencyManagement/> 엘
리먼트에서만 사용 가능하다.(메이븐 2.0.9 이후 버전부터 사용 가능)
30
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5 의존성 예외
& 선택적 의존성
31
의존성관리
메이븐의 핵심기능! 의존 라이브러리 관리
5 속성(properties)
• ${project.build.directory} target 디렉토리,이 속성은 ${pom.build.directory}와 같다.
• ${project.build.outputDirectory} target/classes 디렉토리이다.
• ${project.name}, ${pom.name} 프로젝트 이름, <project>/<name> 엘리먼트 설정 값.
• ${project.version}, ${pom.version} 프로젝트 버전, 버전 정보는 접두사를 사용하지 않고 ${version}으로도 접근 가능하다.
<project>/<version> 엘리먼트 설정 값.
• ${project.build.finalName} package 페이즈를 실행해 압축된 최종 파일 이름이다. <project>/<build>/<finaleName> 엘리먼트 설정 값
• ${settings.localRepository} 로컬 저장소의 경로를 참조한다.
• ${env.PATH} 시스템의 PATH 설정 값을 참조한다.
• ${env.JAVA_HOME} 시스템의 JAVA_HOME 설정 값을 참조한다.
• ${basedir} pom.xml의 위치
32
메
이
븐
이
란
?
1
살
펴
보
기
2
설
정
파
일
3
라
이
프
사
이
클
4
의
존
성
관
리
5
이
클
립
스
통
합
6
33
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6
이클립스의 m2eclipse 사용
GUI
maven-
eclipse-
plugin
메이븐의 이클립스 플러그인 사용
Eclipse’s
m2eclipseVS
이클립스 통합
콘솔
34
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6 플러그인
• 메이븐 홈페이지 : http://maven.apache.org/plugins/index.html
• 모조 프로젝트 : http://mojo.codehaus.org/plugins.html
• 설정파일에 없는 플러그인을 사용할 경우, 기본적으로 groupId가 org.apache.maven.plugin이
고 artifactId가 maven-$name-plugin인 플러그인을 찾는다.
• 이클립스 플러그인은 메이븐에서 기본적으로 제공하는 플러그인으로 따로 설정하지 않아도 된다.
35
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6 maven-eclipse-plugin
• mvn eclipse:eclipse .project.xml, .classpath 등 이클립스 메타파일을 생성해줌으로써 이
클립스에 import가 가능해진다. pom.xml의 의존관계 및 소스코드, 컴파일 경로 등
이 .classpath에 알맞게 추가된다.
• mvn eclipse:clean mvn eclipse:eclipse로 생성된 결과물을 삭제한다.
36
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6 maven-eclipse-plugin
M2_REPO
37
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6 m2eclipse
하나, 둘,
셋, 넷,
38
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6 m2eclipse
하나, 셋,
둘,
39
이클립스통합
이클립스로 메이븐을 쉽게 사용하기
6 m2eclipse
40
감사합니다.

메이븐파헤치기(김우용)

  • 1.
  • 2.
  • 3.
    2 메이븐이란? 자바 세상의 빌드를이끄는 메이븐 1 빌드란? 자바 프로젝트 자바 프로젝트의 빌드를 자동화 해주는 툴 compile src lib/*.jar package deploy 빌드(build)
  • 4.
  • 5.
    4 살펴보기 메이븐 설치 및템플릿 프로젝트 생성 2 MAVEN 다운로드 maven.apache.org/download.cgi binary zip 파일을 다운로드 환경변수 추가 PATH 변수에 MAVEN_HOME/bin 을 추가 정상작동 확인 프롬프트에서 mvn -version MAVEN 설치
  • 6.
    5 살펴보기 메이븐 설치 및템플릿 프로젝트 생성 2 아키타입(archetype) 메이븐이 제공하는 여러가지 구조의 프로젝트 템플릿 mvn archetype:generate -DgroupId=com.nhnent -DartifactId=helloworld -DarchetypeArtifactId=maven-archetype-webapp
  • 7.
    6 살펴보기 메이븐 설치 및템플릿 프로젝트 생성 2 mvn [options] [<goal(s)>] [<phase(s)>] mvn -version mvn archetype:generate -DarchetypeCatalog=internal mvn archetype:generate -DgroupId=com.nhnent -DartifactId=helloworld -DarchetypeArtifactId=maven-archetype-webapp
  • 8.
  • 9.
    8 설정파일 설정파일만 있으면 끝!settings.xml와 pom.xml 3 • 메이븐 툴과 관련된 설정을 담당 • MAVEN_HOME/conf/ 에 위치, 사용자별 적용하려면 USER_HOME/.m2/ 에 설정 가능 settings.xml
  • 10.
    9 설정파일 설정파일만 있으면 끝!settings.xml와 pom.xml 3 pom.xml pom 프로젝트 관계설정 groupId, artifactId, version 모듈 상속 의존 라이브러리 관리 프로젝트 기본설정 빌드설정 빌드환경 빌드 소스/테스트 디렉토리 리소스(자원) 디렉토리 플러그인 리포팅(문서화) 프로젝트 이름 프로젝트 URL 프로젝트 참여자 라이센스 빌드할 환경에 따른 정보 프로파일 • 프로젝트 내 빌드설정을 담당 • 프로젝트 최상위에 존재 • Project Object Model • 다른파일 지정 : mvn –f xxx.xml test
  • 11.
    10 설정파일 설정파일만 있으면 끝!settings.xml와 pom.xml 3 pom.xml • project pom.xml 파일의 최상위 엘리먼트 • modelVersion POM 모델의 버전. 가장 최근 버전이 4.0.0이다. POM 모델이 변경되지 않으면 수정할 필요가 없다. • groupId 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 사용한다. • artifactId 프로젝트를 식별하는 유일한 아이디를 의미한다. 예를 들어 com.nhnent라는 groupId를 사용하고 있는 조직에 여러 개의 프로 젝트가 존재할 수 있다. • packaging 프로젝트를 어떤 형태로 패키징할지 결정한다. jar, war, ear, pom 등이 해당된다. • version 프로젝트의 현재 버전이다. 개발이 완료된 버전일 경우 1.0, 2.0 과 같이 사용하겠지만 프로젝트가 개발 중에는 SNAPSHOT을 접 미사로 사용할 수 있다. SNAPSHOT은 메이븐의 예약어이며, SNAPSHOT을 사용한다면 라이브러리를 다른 방식으로 관리한다. • name 프로젝트 이름 • url 프로젝트 사이트가 있다면 사이트 URL 을 등록한다. • dependencies <dependencies/> 엘리먼트와 하위 엘리먼트인 <dependency/>는 프로젝트와 의존관계에 있는 라이브러리를 관리한다.
  • 12.
    11 설정파일 설정파일만 있으면 끝!settings.xml와 pom.xml 3 pom.xml • 최상위 pom 설정 파일 • 모든 pom.xml이 기본으로 상속하고 있는 부모 설정파일 • mvn help:effective-pom 으로 내용 확인 • 기본으로 생성된 pom.xml에 별 내용이 없어도 많은 동작을 할 수 있는 이유 • 프로젝트 pom.xml에서 재정의하여 최상위 설정파일의 내용을 덮어 쓸 수 있음
  • 13.
    12 설정파일 설정파일만 있으면 끝!settings.xml와 pom.xml 3 pom.xml • build 프로젝트 빌드와 관련한 기본적인 소스 디렉토리 구조, 빌드 산출 물 디렉토리 구조, 빌드시 사용할 플러그인 정보를 관리한다. • sourceDirectory 실제 서비스를 담당하는 자바 소스 코드를 관리하는 디렉토리. 기본 값은 src/main/java • testSourceDirectory 테스트 소스를 관리하기 위한 디렉토리. 메이븐 빌드 툴은 서비스 소스 코드와 테스트 소스 코드를 분리해서 관리하며, 배포 시 테스트 소스 코드가 같이 배포되지 않게 한다. 기본 값은 src/test/java • outputDirectory sourceDirectory 의 소스를 컴파일한 결과물이 위 치하는 디렉토리. 기본 값은 target/classes • testOutputDirectory testSourceDirectory 의 소스를 컴파일한 결 과물이 위치하는 디렉토리. 기본 값은 target/test-classes • resources 서비스에 사용되는 자원을 관리하는 디렉토리. 기본 값은 src/main/resources • testResources 테스트 시에 필요한 자원을 관리하기 위한 디렉토리. 기본 값은 src/test/resources • pluginManagement 빌드 설정 파일에서 관리하는 플러그인 목록. 이 엘리먼트에 설정되어 있다고 해서 반드시 사용하는 것은 아니다. • repositories 빌드할 때 접근할 저장소의 위치를 관리한다. 메이븐 기 본 저장소 URL 은 http://repo1.maven.org/maven2 이다.
  • 14.
  • 15.
    14 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4 complie test package install deploy clean site site- deploy 기본라이프사이클 celan 라이프사이클 site 라이프사이클 문서 사이트 생성 서버 배포 산출물 생성 로컬 저장소 배포 원격 저장소 배포
  • 16.
    15 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4 • 메이븐의 모든 기능은 플러그인을 기반으로 동작 • 페이즈도 플러그인과 연결되어 있다. • 플러그인에서 실행할 수 있는 각각의 작업을 골(goal)이라고 한다. • 한 개의 페이즈는 한 개의 골과 연결된다. • 소스코드를 컴파일하는 complie 골 • 테스트 소스코드 컴파일 testComplie 골 • 도움말 제공 help 골 예) compiler 플러그인 플러그인
  • 17.
    16 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4 • 로컬 저장소 내 최신버전을 사용하길 원한다면 버전 생략가능 • maven-$name-plugin 또는 $name-maven-plugin 형식의 artifactId를 사용 한다면 $name만 사용해서 실행 가능 • settings.xml의 플러그인 그룹에 포함된 플러그인이면 groupId 생략가능 • 메이븐 기본 플러그인들이 포함되어 있는 org.apache.maven.plugins와 org.codehaus.mojo는 settings.xml에 없어도 기본으로 설정 됨 플러그인 실행방법 mvn groupId:artifactId:version:goal 예) mvn org.apache.maven.plugins:maven-complier-plugin:2.1:complie
  • 18.
    17 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4 페이즈와 골의 연결관계 process- resources complie process- classes process-test- resource test-complie test prepare- package package resource: resource complier: complie resource: testResource complier: testComplie surefire:test war:war Phases Goals
  • 19.
    18 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4
  • 20.
    19 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4• mvn process-resources resources:resoureces의 실행으로 resource디렉터리에 있는 내용을 target/classes로 복사 • mvn complie complier:complie의 실행으로 src/java 및의 모든 자바소스를 컴파일해서 target/classes로 컴파일 • mvn process-testResources, mvn test-complie resources:testResources, complier:testCopile 로 test->target/test-classes 로 복사 나머지 동일 • mvn test surefire:test의 실행으로 target/test-classes에 있는 테스트케이스의 단위테스트들을 실행한다. 그리고 그 결과물을 target/surefire-reports에 생성한다. • mvn -Dtest=클래스패턴1,클래스패턴2,... test 패턴에 해당하는 클래스의 테스트케이스만 검사 • mvn -Dmaven.test.skip=true test 테스트하지 않고 빌드를 진행한다. • mvn package target디렉터리 하위에 jar, war, ear등의 압축파일 생성, 이름은 build엘리먼트의 finalName엘리먼트의 값을 사용, 지정 되지 않을 경우 "artifactId-version”의 이름으로 압축됨(각 압축종류별로 플러그인이 필요, 빌드 시 알아서 다운로드함) • mvn install 로컬 저장소로 배포 • mvn deploy 원격 저장소로 배포 • mvn clean 빌드를 통해 생성된 target디렉터리 삭제 • mvn clean test, mvn clean install 이전 빌드로 인해 남아있는 산출물의 문제로 빌드 오류가 발생하는 경우 • mvn site target/site에 문서사이트 생성 • mvn site-deploy 문서 사이트를 서버로 배포
  • 21.
    20 라이프사이클 페이즈, 플러그인, 골..메이븐의 내부동작 원리 4
  • 22.
  • 23.
    22 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 하나, spring 홈페이지 접근 둘, Spring 라이브러리 다운로드 셋, 압축 해제 넷, 추가/수정할 라이브 러리를 찾아서 복사 기존 라이브러리 관리방법 다섯, 이클립스 클래스패스 수정
  • 24.
    23 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 중앙 저장소 http://repo1.maven.org/maven2 원격 저장소 springsource 저장소 사내 저장소 등 로컬 저장소 USER_HOME/.m2/repository MAVEN 저장소
  • 25.
    24 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 1. 로컬 저장소 -> 설정한 순서대로 라이브러리를 검색 2. 중앙 저장소(http://repo1.maven.org/maven2/) 에 접근 3. groupId/artifactId/version 에 존재하는 ${artifactId}-${version}.jar 파일을 다운로드 4. 최종적으로 http://repo.maven.org/maven2/junit/junit/3.8.1/junit-3.8.1.jar 가 있는지 확인 후 다운로드
  • 26.
    25 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 http://mvnrepository.com
  • 27.
    26 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 Struts2 SpringPROJECT Hibernate Apache Commons Log4j 의존관계 의존성 전이 • 중앙 저장소에서 다운로드 받을때 *.pom 파일도 같이 받는데 이곳에 의존성 정보가 들어있다. • 따라서 그 라이브러리를 받으면 그 라이브러리와 의존관계에 있는 라이브러리들도 자동으로 다운로드 받는다.
  • 28.
    27 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 의존성 중개 A B C D2.0 A E D1.0
  • 29.
    28 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 의존성 관리
  • 30.
    29 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 의존성 스코프 • compile 스코프를 설정할지 않았을 때의 기본 스코프이다. 컴파일 시에도 사용되며, 배포 시에도 같이 배포되어야 하는 라이브러리이다. • provided 예를 들어 servlet.jar는 서블릿 컨테이너에서 제공하므로 컴파일 시점에는 필요하지만, 애플리케이션을 배포할 때 같이 배포될 필요는 없다. 이와 같은 상황에서 사용하는 스코프이다. • runtime runtime 스코프는 말 그대로 컴파일 시에는 사용되지 않지만 애플리케이션을 실행할 때 사용되는 라이브러리일 경우 설정한다. • test 테스트하는 시점에만 사용하는 라이브러리에 대한 스코프를 설정할 때 사용한다. • system system 스코프는 provided와 비슷하다. 단지 우리가 직접 jar 파일을 제공해야 한다. 따라서 이 스코프의 jar 파일은 저장소에서 관리되지 않을 수도 있다. • import 다른 POM 설정 파일에 정의되어 있는 의존 관계 설정을 현재 프로젝트로 가져온다. 이 범 위는 <dependencyManagement/> 엘 리먼트에서만 사용 가능하다.(메이븐 2.0.9 이후 버전부터 사용 가능)
  • 31.
    30 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 의존성 예외 & 선택적 의존성
  • 32.
    31 의존성관리 메이븐의 핵심기능! 의존라이브러리 관리 5 속성(properties) • ${project.build.directory} target 디렉토리,이 속성은 ${pom.build.directory}와 같다. • ${project.build.outputDirectory} target/classes 디렉토리이다. • ${project.name}, ${pom.name} 프로젝트 이름, <project>/<name> 엘리먼트 설정 값. • ${project.version}, ${pom.version} 프로젝트 버전, 버전 정보는 접두사를 사용하지 않고 ${version}으로도 접근 가능하다. <project>/<version> 엘리먼트 설정 값. • ${project.build.finalName} package 페이즈를 실행해 압축된 최종 파일 이름이다. <project>/<build>/<finaleName> 엘리먼트 설정 값 • ${settings.localRepository} 로컬 저장소의 경로를 참조한다. • ${env.PATH} 시스템의 PATH 설정 값을 참조한다. • ${env.JAVA_HOME} 시스템의 JAVA_HOME 설정 값을 참조한다. • ${basedir} pom.xml의 위치
  • 33.
  • 34.
    33 이클립스통합 이클립스로 메이븐을 쉽게사용하기 6 이클립스의 m2eclipse 사용 GUI maven- eclipse- plugin 메이븐의 이클립스 플러그인 사용 Eclipse’s m2eclipseVS 이클립스 통합 콘솔
  • 35.
    34 이클립스통합 이클립스로 메이븐을 쉽게사용하기 6 플러그인 • 메이븐 홈페이지 : http://maven.apache.org/plugins/index.html • 모조 프로젝트 : http://mojo.codehaus.org/plugins.html • 설정파일에 없는 플러그인을 사용할 경우, 기본적으로 groupId가 org.apache.maven.plugin이 고 artifactId가 maven-$name-plugin인 플러그인을 찾는다. • 이클립스 플러그인은 메이븐에서 기본적으로 제공하는 플러그인으로 따로 설정하지 않아도 된다.
  • 36.
    35 이클립스통합 이클립스로 메이븐을 쉽게사용하기 6 maven-eclipse-plugin • mvn eclipse:eclipse .project.xml, .classpath 등 이클립스 메타파일을 생성해줌으로써 이 클립스에 import가 가능해진다. pom.xml의 의존관계 및 소스코드, 컴파일 경로 등 이 .classpath에 알맞게 추가된다. • mvn eclipse:clean mvn eclipse:eclipse로 생성된 결과물을 삭제한다.
  • 37.
    36 이클립스통합 이클립스로 메이븐을 쉽게사용하기 6 maven-eclipse-plugin M2_REPO
  • 38.
    37 이클립스통합 이클립스로 메이븐을 쉽게사용하기 6 m2eclipse 하나, 둘, 셋, 넷,
  • 39.
    38 이클립스통합 이클립스로 메이븐을 쉽게사용하기 6 m2eclipse 하나, 셋, 둘,
  • 40.
  • 41.