SlideShare a Scribd company logo
Apache Maven
Maven
• 프로젝트 관리 및 통합 도구 for Java
• 오픈소스 프로젝트 with 아파치 라이센스
https://github.com/apache/maven
• 최신 release : 3.5.3
• 프로젝트 빌드, reporting and documentation 관리
• POM (Project Object Model)
Maven
• 아파치 Ant의 대안으로 만들어졌다.
프로젝트 A 프로젝트 B 프로젝트 C
Ant
스크립트
A
Ant
스크립트
B
Ant
스크립트
B
CVS
소스코드, jar
Maven
• Based on POM (pom.xml)
프로젝트 A 프로젝트 B 프로젝트 C
pom.xml pom.xml pom.xml
svn or git
소스코드
Maven 프로젝트 생성
• IntelliJ 기준
- 기본 생성
- archetype 선택 : maven-archetype-quickstart 등
- CLI : mvn archetype:generate
• Plugin goal
- ‘Plugin 이름:Plugin 지원 goal’
- ex) mvn compiler:compile, compiler:testCompile
기본 디렉토리 구조
• src/main/java
• src/main/resources
• src/main/webapp
• src/test/java
• src/test/resources
pom 파일 기본
• 프로젝트 정보 - 프로젝트의 이름, 개발자 목록, 라이센스 등의
정보를 기술
• 빌드 설정 - 소스, 리소스, 라이프 사이클 별 실행할 플러그인 등
빌드와 관련된 설정을 기술
• 빌드 환경 - 사용자 환경 별로 달라질 수 있는 프로파일 정보를
기술
• POM 연관 정보 - 의존 프로젝트(모듈), 상위 프로젝트, 포함하
고 있는 하위 모듈 등을 기술
dependency scope
• <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
dependency scope
• compile – 컴파일 할 때 필요. 클래스패스에 포함된다. default
• runtime - 런타임에 필요. ex) JDBC 드라이버 등. 배포시 포함
• provided - 컴파일 할 때 필요하지만, 실제 런타임 때에는 컨테
이너 같은 것에서 기본으로 제공되는 모듈임을 의미한다.
ex) 서블릿이나 JSP API 등. 배포시 제외
• test - 테스트 코드를 컴파일 할 때 필요. 테스트 시에 클래스패
스에 포함. 배포시 제외
Maven Lifecycle
• clean, build(default), site 총 3가지의 lifecycle
• 각 lifecycle은 순서를 갖는 단계(phase)로 구성
• 각 phase 별로 기본적으로 실행되는 plugin goal이 정의되어 있
어서 각 phase마다 알맞은 작업이 실행된다.
phase 설명 phase에 묶인 플러그인 실행
compile
소스 코드를 컴파일해서 클래스 출력 폴더에 클래스
를 생성한다.
compiler:compile
test 테스트를 실행한다. surefire:test
package
컴파일 된 코드와 자원 파일들을 jar, war와 같은 배포
형식으로 패키징한다.
패키징에 따라 다름
jar - jar:jar
war - war:war
pom - site:attach-descriptor
ejb - ejb:ejb
[표] build lifecycle의 주요 단계(phase)
build lifecycle의 phase
• validate
• compile
• test
• package
• verify
• install
• deploy
참고
• http://javacan.tistory.com/entry/MavenBasic
• http://maven.apache.org
• https://maven.apache.org/guides/introduction/introduction-
to-the-lifecycle.html
• Maven Repository
- https://mvnrepository.com
• Maven Search
- http://search.maven.org

More Related Content

What's hot

XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개Jung soo Ahn
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍ymtech
 
Eclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekEclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekTaewoo Kim
 
실무에서 라라벨 테스트를 작성하다 알게 된 것
실무에서 라라벨 테스트를 작성하다 알게 된 것실무에서 라라벨 테스트를 작성하다 알게 된 것
실무에서 라라벨 테스트를 작성하다 알게 된 것Hyun-Seok Lee
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑NAVER D2
 
네이버 SVN 설치
네이버 SVN 설치네이버 SVN 설치
네이버 SVN 설치Hyunmin Park
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
2018 03-05-robot framework
2018 03-05-robot framework2018 03-05-robot framework
2018 03-05-robot frameworkyacc01
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략흥래 김
 
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER형근 송
 

What's hot (20)

XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개
 
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
20170310 tech day-1st-maven을 이용한 프로그램 빌드-박준홍
 
Eclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekEclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd Week
 
실무에서 라라벨 테스트를 작성하다 알게 된 것
실무에서 라라벨 테스트를 작성하다 알게 된 것실무에서 라라벨 테스트를 작성하다 알게 된 것
실무에서 라라벨 테스트를 작성하다 알게 된 것
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
Svn
SvnSvn
Svn
 
Svn
SvnSvn
Svn
 
네이버 SVN 설치
네이버 SVN 설치네이버 SVN 설치
네이버 SVN 설치
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
Jenkins with AWS
Jenkins with AWSJenkins with AWS
Jenkins with AWS
 
Learning Laravel
Learning LaravelLearning Laravel
Learning Laravel
 
2018 03-05-robot framework
2018 03-05-robot framework2018 03-05-robot framework
2018 03-05-robot framework
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
Subversion
SubversionSubversion
Subversion
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Maven
MavenMaven
Maven
 
Eclipse RAP
Eclipse RAPEclipse RAP
Eclipse RAP
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER
 

Similar to Backend Master | 3.1.2 Build - Java build tool - Maven

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
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-Helm2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-HelmSK Telecom
 
Collaboration with Eclipse final
Collaboration with Eclipse finalCollaboration with Eclipse final
Collaboration with Eclipse finalKenu, GwangNam Heo
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startupJunHo Yoon
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안Opennaru, inc.
 
Source To URL Without Dockerfile
Source To URL Without DockerfileSource To URL Without Dockerfile
Source To URL Without DockerfileWon-Chon Jung
 

Similar to Backend Master | 3.1.2 Build - Java build tool - Maven (20)

Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
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
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
okspring3x
okspring3xokspring3x
okspring3x
 
2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-Helm2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-Helm
 
Collaboration with Eclipse final
Collaboration with Eclipse finalCollaboration with Eclipse final
Collaboration with Eclipse final
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startup
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 기초
Java 기초Java 기초
Java 기초
 
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
 
java thrift
java thriftjava thrift
java thrift
 
Source To URL Without Dockerfile
Source To URL Without DockerfileSource To URL Without Dockerfile
Source To URL Without Dockerfile
 

More from Kyunghun Jeon

Backend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionBackend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionKyunghun Jeon
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalKyunghun Jeon
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitKyunghun Jeon
 
Backend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationBackend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationKyunghun Jeon
 
Backend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleBackend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleKyunghun Jeon
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsKyunghun Jeon
 
Backend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - EhcacheBackend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - EhcacheKyunghun Jeon
 
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Kyunghun Jeon
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Kyunghun Jeon
 

More from Kyunghun Jeon (9)

Backend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker IntroductionBackend Master | 3.4.2 Deploy - Docker Introduction
Backend Master | 3.4.2 Deploy - Docker Introduction
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
Backend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnitBackend Master | 3.2.1 Test - JUnit
Backend Master | 3.2.1 Test - JUnit
 
Backend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy AutomationBackend Master | 3.4.1 Deploy - Deploy Automation
Backend Master | 3.4.1 Deploy - Deploy Automation
 
Backend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - GradleBackend Master | 3.1.3 Build - Java build tool - Gradle
Backend Master | 3.1.3 Build - Java build tool - Gradle
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build tools
 
Backend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - EhcacheBackend Master | 2.2 Cache - Ehcache
Backend Master | 2.2 Cache - Ehcache
 
Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1Backend Master | 2.1.4 Cache - Redis Clustering part.1
Backend Master | 2.1.4 Cache - Redis Clustering part.1
 
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
Backend Master | 1.1 Enhancing performance - Scalability (Scale UP & OUT)
 

Backend Master | 3.1.2 Build - Java build tool - Maven

  • 2. Maven • 프로젝트 관리 및 통합 도구 for Java • 오픈소스 프로젝트 with 아파치 라이센스 https://github.com/apache/maven • 최신 release : 3.5.3 • 프로젝트 빌드, reporting and documentation 관리 • POM (Project Object Model)
  • 3. Maven • 아파치 Ant의 대안으로 만들어졌다. 프로젝트 A 프로젝트 B 프로젝트 C Ant 스크립트 A Ant 스크립트 B Ant 스크립트 B CVS 소스코드, jar
  • 4. Maven • Based on POM (pom.xml) 프로젝트 A 프로젝트 B 프로젝트 C pom.xml pom.xml pom.xml svn or git 소스코드
  • 5. Maven 프로젝트 생성 • IntelliJ 기준 - 기본 생성 - archetype 선택 : maven-archetype-quickstart 등 - CLI : mvn archetype:generate • Plugin goal - ‘Plugin 이름:Plugin 지원 goal’ - ex) mvn compiler:compile, compiler:testCompile
  • 6. 기본 디렉토리 구조 • src/main/java • src/main/resources • src/main/webapp • src/test/java • src/test/resources
  • 7. pom 파일 기본 • 프로젝트 정보 - 프로젝트의 이름, 개발자 목록, 라이센스 등의 정보를 기술 • 빌드 설정 - 소스, 리소스, 라이프 사이클 별 실행할 플러그인 등 빌드와 관련된 설정을 기술 • 빌드 환경 - 사용자 환경 별로 달라질 수 있는 프로파일 정보를 기술 • POM 연관 정보 - 의존 프로젝트(모듈), 상위 프로젝트, 포함하 고 있는 하위 모듈 등을 기술
  • 9. dependency scope • compile – 컴파일 할 때 필요. 클래스패스에 포함된다. default • runtime - 런타임에 필요. ex) JDBC 드라이버 등. 배포시 포함 • provided - 컴파일 할 때 필요하지만, 실제 런타임 때에는 컨테 이너 같은 것에서 기본으로 제공되는 모듈임을 의미한다. ex) 서블릿이나 JSP API 등. 배포시 제외 • test - 테스트 코드를 컴파일 할 때 필요. 테스트 시에 클래스패 스에 포함. 배포시 제외
  • 10. Maven Lifecycle • clean, build(default), site 총 3가지의 lifecycle • 각 lifecycle은 순서를 갖는 단계(phase)로 구성 • 각 phase 별로 기본적으로 실행되는 plugin goal이 정의되어 있 어서 각 phase마다 알맞은 작업이 실행된다. phase 설명 phase에 묶인 플러그인 실행 compile 소스 코드를 컴파일해서 클래스 출력 폴더에 클래스 를 생성한다. compiler:compile test 테스트를 실행한다. surefire:test package 컴파일 된 코드와 자원 파일들을 jar, war와 같은 배포 형식으로 패키징한다. 패키징에 따라 다름 jar - jar:jar war - war:war pom - site:attach-descriptor ejb - ejb:ejb [표] build lifecycle의 주요 단계(phase)
  • 11. build lifecycle의 phase • validate • compile • test • package • verify • install • deploy
  • 12. 참고 • http://javacan.tistory.com/entry/MavenBasic • http://maven.apache.org • https://maven.apache.org/guides/introduction/introduction- to-the-lifecycle.html • Maven Repository - https://mvnrepository.com • Maven Search - http://search.maven.org

Editor's Notes

  1. Maven, a Yiddish word meaning accumulator of knowledge, was originally started as an attempt to simplify the build processes in the Jakarta Turbine project. There were several projects each with their own Ant build files that were all slightly different and JARs were checked into CVS. We wanted a standard way to build the projects, a clear definition of what the project consisted of, an easy way to publish project information and a way to share JARs across several projects. 자카르타 Turbine 프로젝트에서 빌드 프로세스를 단순화려는 시도로 시작 각각의 프로젝트는 서로 다른 ant 빌드 파일을 가지고 있음 사용하는 jar 라이브러리는 CVS에 체크인 되어 있음 * 필요한 것 표준화된 방법의 빌드 프로세스 프로젝트 구성의 명확한 정의 라이브러리를 공유하고, 프로젝트 정보를 배포하는 쉬운 방법
  2. pom 파일에 기초해서 빌드 각각의 프로젝트는 Object Model을 사용해서 다른 곳에서 재사용, 참조 될 수 있음 규모가 어느정도 있는 프로젝트의 경우 각각의 모듈을 Nexus 같은 메이븐 리파지토리를 사용해서 서로 공유할 수 있음
  3. 설치가 끝났다면 Maven 프로젝트를 생성해 보자. 명령 프롬프트에서 아래 명령어를 실행하면 된다. (아래 명령어를 처음 실행할 경우 꽤 오랜 시간이 걸리는데, 그 이유는 Maven이 필요한 플러그인과 모듈을 다운로드 받기 때문이다. Maven 배포판은 최초로 Maven을 사용하는 데 필요한 모듈만 포함하고 있고, 그 외에 archetype 플러그인, compiler 플러그인 등 Maven을 사용하는 데 필요한 모듈은 포함하고 있지 않다. 이들 모듈은 실제로 필요할 때 Maven 중앙 리포지토리에서 로딩된다.) mvn archetype:generate
  4. 라이프사이클의 특정 단계(phase)를 실행하면 그 단계의 앞에 위치한 모든 단계가 실행된다.
  5. clean 라이프사이클 Install - 로컬 리포지토리에 패키지를 복사한다. deploy - 생성된 패키지 파일을 원격 리포지토리에 등록하여, 다른 프로젝트에서 사용할 수 있도록 한다. site 라이프사이클 validate - validate the project is correct and all necessary information is available compile - compile the source code of the project test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed package - take the compiled code and package it in its distributable format, such as a JAR. verify - run any checks on results of integration tests to ensure quality criteria are met install - install the package into the local repository, for use as a dependency in other projects locally deploy - done in the build environment, copies the final package to the remote repository for sharing with other developers and projects.