SlideShare a Scribd company logo
1 of 41
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
감사합니다.

More Related Content

What's hot

Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Jérôme Petazzoni
 
Jenkins for java world
Jenkins for java worldJenkins for java world
Jenkins for java worldAshok Kumar
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginnersBugRaptors
 
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulSeungYong Oh
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google KubernetesYongbok Kim
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
Introduction to Helm
Introduction to HelmIntroduction to Helm
Introduction to HelmHarshal Shah
 
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdfssuserf8b8bd1
 
Interfaces de múltiples documentos (mdi)
Interfaces de múltiples documentos (mdi)Interfaces de múltiples documentos (mdi)
Interfaces de múltiples documentos (mdi)Juvenal Quispe Serna
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaEdureka!
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 

What's hot (20)

Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
Jenkins
JenkinsJenkins
Jenkins
 
Jenkins for java world
Jenkins for java worldJenkins for java world
Jenkins for java world
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginners
 
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
 
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
Git basic
Git basicGit basic
Git basic
 
Introduction to Helm
Introduction to HelmIntroduction to Helm
Introduction to Helm
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
Virtual Container - Docker
Virtual Container - Docker Virtual Container - Docker
Virtual Container - Docker
 
Git
GitGit
Git
 
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
 
Interfaces de múltiples documentos (mdi)
Interfaces de múltiples documentos (mdi)Interfaces de múltiples documentos (mdi)
Interfaces de múltiples documentos (mdi)
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
Helm 3
Helm 3Helm 3
Helm 3
 
Introduction to container based virtualization with docker
Introduction to container based virtualization with dockerIntroduction to container based virtualization with docker
Introduction to container based virtualization with docker
 

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

메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍ymtech
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenKyunghun Jeon
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 ChefOpen Source Consulting
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
Opensource java library deploy public repository
Opensource java library deploy public repositoryOpensource java library deploy public repository
Opensource java library deploy public repositoryKyungHo Jung
 
오픈소스가이드 win,c++
오픈소스가이드 win,c++오픈소스가이드 win,c++
오픈소스가이드 win,c++jdo
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptxssuserf875e6
 
JBoss EAP on Azure
JBoss EAP on Azure JBoss EAP on Azure
JBoss EAP on Azure rockplace
 
maven 소개
maven 소개maven 소개
maven 소개Suan Lee
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호ETRIBE_STG
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleKyunghun Jeon
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드수정 김
 

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

메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
Maven
MavenMaven
Maven
 
okspring3x
okspring3xokspring3x
okspring3x
 
Backend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - MavenBackend Master | 3.1.2 Build - Java build tool - Maven
Backend Master | 3.1.2 Build - Java build tool - Maven
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
Opensource java library deploy public repository
Opensource java library deploy public repositoryOpensource java library deploy public repository
Opensource java library deploy public repository
 
오픈소스가이드 win,c++
오픈소스가이드 win,c++오픈소스가이드 win,c++
오픈소스가이드 win,c++
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx2022.08 멘토링 자료.pptx
2022.08 멘토링 자료.pptx
 
JBoss EAP on Azure
JBoss EAP on Azure JBoss EAP on Azure
JBoss EAP on Azure
 
Maven
MavenMaven
Maven
 
maven 소개
maven 소개maven 소개
maven 소개
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build LifecycleBackend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
 

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

  • 3. 2 메이븐이란? 자바 세상의 빌드를 이끄는 메이븐 1 빌드란? 자바 프로젝트 자바 프로젝트의 빌드를 자동화 해주는 툴 compile src lib/*.jar package deploy 빌드(build)
  • 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
  • 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 이다.
  • 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
  • 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의 위치
  • 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 하나, 셋, 둘,