❤️01_Java/01_Spring & Boot

#Maven(메이븐) #pom.xml #scope #설정

roomname-dev 2023. 5. 31.
728x90

Spring 프레임 워크 기반의 프로젝트를 진행 해보면 Maven을 많이 접해봤을것이다. maven을 통해서 라이브러리들을 자동으로 다운받아 사용한다가 제일 간결한 대답일 것이다. 

 

Maven을 사전적으로 찾아보면

Apache Mavent은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다. Apache License로 
배포되는 오픈 소스 소프트웨어이다.

이렇게 표현하고 있다. 한마디로 pom.xml 문서에 dependency를 통해 의존관계를 정의해 놓으면 네트워크 라이브러를 통해 자동으로 다운이된다. 
Maven사이트 :  https://mvnrepository.com/artifact/org.springframework.boot/spring-boot/2.7.12

 

🧨Maven 사용시 장점
1. 라이브러리 관리가 편하다( pom.xml에 dependency를 통한 의존관계만 명시해두면 
네트워크 드라이브에서 자동으로 다운된다. 
2. 프로젝트 작성, 컴파일, 테스트 등 프로젝트 라이프 사이클에 포함되는 각 테스트 지원가능 
3. war파일 기반 배표용
🧨Maven의 LifeCycle
 
메이븐은 프레임워크로서 동작방식이 정해져 있다. 
일련의 단계(Phase)에 연계된 Goal을 실행하는 과정을 Build라 하고 이렇게 미리 정의된 Build순서를 
라이프사이클(Lifecycle)이라 한다. 
한마디로 각 빌드 단계를 Phase라고 하며 이렇게 정의된 순서를 Lifecycle이라고 말한다.
🧨Eclipse에서 Run as를 눌러보면 Maven의 Build Lifecycle를 볼수 있다. 

Maven build : 메이븐 빌드를 실행
Maven build.... : 새로운 사용자 빌드
Maven clean : target에 지정된 모든 소스를 삭제
Maven generate-sources : 컴파일 과정에 포함될 소스를 생성
Maven install : Local Repository에 패키지를 복사

🧨메이븐은 3개의 표준 라이프사이클을 제공합니다.

Clean : 빌드 시 생성되었던 Output을 삭제
Default(Build) : 일반적인 빌드 프로세스를 위한 모델
Site : 프로젝트 문서와 사이트 작성을 수행

 

출처 http://wiki.gurubee.net/display/SWDEV/Maven+Lifecycle 

 

Maven Lifecycle - [정리]소프트웨어 개발 지식창고 - 개발자, DBA가 함께 만들어가는 구루비 지식창고!

Maven Lifecycle <!-- Root decorator: this is a layer of abstraction that Confluence doesn't need. It will be removed eventually. --> Maven Lifecycle 1. Maven Lifecycle 이란 Maven에서는 clean, build, site의 세 가지 Lifecycle을 제공하고 있다....

wiki.gurubee.net

Maven Lifecycle 

1. Maven Lifecycle 이란

  • Maven에서는 clean, build, site의 세 가지 Lifecycle을 제공하고 있다.
  • 컴파일(compile), 테스트(test), 패키지(package), 배포(depooy)등의 과정은 빌드 Lifecycle에 속한다.
  • Maven은 모든 빌드 단위에 대한 Lifecycle이 예약되어 있어서 개발자가 임의로 변경 할 수 없다.
  • 각 Lifecycle은 순서를 갖는 단계(phase)로 구성된다.
  • Maven의 기본 Lifecycle을 이해하려면 Phase와 Goal의 개념을 이해해야 한다.

#Maven(메이븐) #pom.xml #scope #설정 - 1. Maven Lifecycle 이란

2. Phase와 Goal

#Maven(메이븐) #pom.xml #scope #설정 - 2. Phase와 Goal

2.1 Phase

  • Phase는 Build Lifecycle의 각각의 단계를 의미 한다.
  • Phase는 특정 순선에 따라서 goal이 실행되도록 구조를 제공 한다.
  • Phase 간에는 의존 관계가 있다.
    예를 들어 package phase가 수행되기 위해서는 이전 phase가 순서대로 수행된 다음에 실행된다.

#Maven(메이븐) #pom.xml #scope #설정 - 2. Phase와 Goal - undefined - 2.1 Phase

2.2 Goal

  • Goal은 Ant의 Target과 같은 개념으로 생각하면 된다.

2.3 Phase와 Goal의 관계

  • Maven에서 제공하는 모든 기능은 플러그인 기반으로 동작한다.
  • Maven에서 기본으로 제공하는 Phase를 실행하면 해당 Phase와 연결된 플러그인의 Goal이 실행된다.
  • 각 phase는 0개 이상의 goal과 바인드 되어 있으며, 대부분 0또는 1개 이상의 Goal이 바인드 되어 있다.
    #Maven(메이븐) #pom.xml #scope #설정 - 2. Phase와 Goal - undefined - 2.3 Phase와 Goal의 관계
  • Plugin Goal
    • Maven에서 플러그인을 실행할 때 '플러그인이름:플러그인지원골'의 형식으로 실행 할 기능을 선택 할 수 있다.
    • 예를들어 mvn compiler:compile은 'compiler' 플러그인에서 'compile' 기능(goal)을 실행한다는 것을 뜻 한다.
  • 아래는 package phase가 실행되기 전에 완료되야 하는 phase와 Goal이다.

PhaseGoal

[ resources:resources ] resources
[ compiler:compile ] compile
[ resources:testResources ] test-resources
[ compiler:testCompile ] test-compile
[ surefire:test ] test
[ jar:jar ] package

3. Maven 디폴트 Phase와 Goal

process-resources

  • resources:resources Goal이 실행 된다.
  • Maven Resources Plugin
  • <resource> directory(/src/main/resources)를 <outputDirectory>에 생성 한다.

compile

  • resources:resources, compiler:compile Goal이 실행 된다.
  • Maven Compiler Plugin
  • 소스 코드를 컴파일해서 클래스를 <outputDirectory>에 생성 한다.

test-compile

  • compiler:compile, compiler:testCompile Goal이 실행 된다.
  • 테스트 소스 코드를 컴파일 한다.

test

  • compiler:compile, compiler:testCompile, surefire:test Goal이 실행 된다.
  • Maven Surefire Plugin
  • junit과 같은 테스트 코드를 실행, 테스트가 실패하면 빌드를 멈춘다
  • target/surefie-reports디렉토리 안에 test 리포트 파일을 생성한다
  • 단위 테스트 코드가 깨져도 빌드를 성공시키려면 maven.test.skip 속성을 true로 설정하면 된다.
    <properties>
            <maven.test.skip>true</maven.test.skip>
    </properties>       
     

package

  • package를 실행하면 compile, test-compile, test 순으로 실행된 다음 jar, war파일이 target 디렉토리 아래에 생성된다.
  • 패키징에 따라 아래의 플러그 인을 사용한다.
  • Maven Jar Plugin
  • Maven WAR Plugin
  • Maven EAR Plugin

install

deploy

  • 원격 리파지토리에 등록하여, 다른 프로젝트에서 사용 할 수 있도록 한다.
  • Maven Deploy Plugin

clean

728x90

댓글