Maven

2022. 2. 27. 18:22빌드 도구/Maven

빌드

빌드란 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 혹은 그에 대한 결과물을 의미합니다. 즉, 우리가 작성한 소스 코드, 각종 파일 및 자원 등을 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물을 빌드라고 합니다.

빌드 도구

빌드 도구란 프로젝트 생성, 테스트, 빌드, 배포 등의 작업을 위한 프로그램을 의미합니다. 빠른 기간 동안 계속 늘어나는 라이브러리 추가, 라이브러리 버전 동기화의 어려움을 해소하고자 등장했습니다.

Maven

Maven이란 프로젝트의 전체적인 라이프 사이클을 관리하는 도구의 일종입니다. 필요한 특정 라이브러리를 pom.xml에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운로드 받아줍니다. Maven은 간단한 설정을 통한 배포 관리도 가능하게 합니다.

Maven LifeCycle

LifeCycle

Default(Build)
일반적인 빌드 프로세스를 위한 모델

Clean
빌드 시 생성되었던 파일들을 삭제하는 단계

Validate
프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계

Compile
프로젝트의 소스코드를 컴파일하는 단계

Test
유닛테스트를 수행하는 단계(테스트에 실패하면 빌드 실패로 처리하고 스킵 가능)

Package
실제 컴파일된 소스 코드와 리소스들을 jar, war 와 같이 배포를 위한 패키지 파일로 만드는 단계

Verify
통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계

Install
패키지를 로컬 저장소에 설치하는 단계

Deploy
만들어진 package를 원격 저장소에 release하는 단계

Phase(단계)

LifeCycle 각각의 단계를 Phase라고 합니다. Phase는 의존 관계를 가지고 있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행 되어야합니다.

Goal

Goal이란 특정 작업, 최소한의 실행 단위를 의미합니다. 하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원하며, 플러그인에서 실행할 수 있는 각각의 기능을 Goal이라고 합니다.

Maven Plugin

Maven은 plugin을 구동해주는 프레임워크입니다. Maven은 여러 plugin으로 구성되어 있으며, 각각의 plugin은 하나 이상의 goal을 포함하고 있습니다.

이미지 출처: https://sjh836.tistory.com/131

플러그인 목록

이미지 출처: https://sjh836.tistory.com/131

Pom.xml 예시

<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <!--POM model의 버전--> 
    <modelVersion>4.0.0</modelVersion> 

    <!--프로젝트를 생성하는 조직의 고유 아이디, 일반적으로 도메인 이름을 거꾸로 적음 -->
    <groupId>com.god</groupId> 

    <!--프로젝트 빌드시 파일 대표 이름-->
    <artifactId>bo</artifactId>

     <version>0.0.1-SNAPSHOT</version> 

    <!--패키징 유형(jar, war, ear 등)--> 
    <packaging>war</packaging> 

    <!-- 버전관리시 용이 
        ex) 해당 버전을 선언 하고 다음과 같이 활용 가능
             <version>${java.version}</version> --> 
    <properties> 
        <java.version>1.8</java.version> 
    </properties> 

    <!-- 프로젝트와 의존 관계에 있는 라이브러리들을 관리-->
    <dependencies>  
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-web</artifactId> 
        </dependency> 
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-tomcat</artifactId> 
            <scope>provided</scope> 
        </dependency>
         <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-test</artifactId> 
            <scope>test</scope> 
            <exclusions> 
                <exclusion> 
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>’
                 </exclusion> 
            </exclusions> 
        </dependency> 
    </dependencies>

    <!--빌드에 사용할 플러그인 목록-->
     <build>  
        <plugins> 
            <plugin>
                 <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin> 
        </plugins> 
    </build> 
</project>

출처: https://goddaehee.tistory.com/199

728x90

'빌드 도구 > Maven' 카테고리의 다른 글

maven-war-plugin  (0) 2020.04.04
Maven Scope  (0) 2020.04.01
Maven Profile  (0) 2020.03.31