Java/Maven

Maven에 대해

범데이 2022. 8. 3. 23:12

1. Maven이란?

Maven이란 자바용 프로젝트 관리 도구이다. (공식사이트: Apache Maven Project)

 

 

Maven은 프로젝트의 전체적인 LifeCycle을 관리하는 관리도구이다. 프로젝트 객체 모델(Proejct Object Model:POM) 이라는 개념을 바탕으로 프로젝트의 의존성 관리, 라이브러리 관리, 프로젝트 LifeCycle 관리 기능 등을 제공한다. 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능을 제공한다.

 

빌드(build) 란?

소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다.

이를 좀더 쉽게 풀어 말하자면 우리가 작성한 소스코드(Java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 잇는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.

 

메이븐의 특징

  • 필요한 라이브러리를 특정 문서(pom.xml)에 정의만 해주면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리 작동에 필요한 하위 라이브러리까지 네트워크를 통해서 자동으로 다운받아준다.
  • 중앙 저장소를 통한 자동 의존성 관리를 한다. 중앙 저장소는 라이브러리를 공유하는 파일서버이고, 저장소는 아파치재단에서 운영관리하는 저장소를 사용할 수도 있고 별도의 사설 저장소를 사용할 수도 있다.
  • 프로젝트 전체내용에 대한 기술 및 설정을 담당하는 pom과 라이브러리관리에 대한 dependency / repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드 생명주기를 다루는 라이프사이클 및 관련 플러그인들과의 연동을 다루는 부분으로 구성된다.

 

Maven Architecture

 

 

Maven LifeCycle

 

메이븐은 정해진 라이프 사이클을 통해 프로젝트를 빌드한다.

메이븐 라이프 사이클의 종류는 기본, clean, site가 있다.

각 라이프 사이클 안에는 더 작은 단위의 빌드 단계가 정의되어 있는데 이를 phase라고 한다.

phase는 논리적인 빌드 단계이고, 실제로는 phase에 연결된 plug-in있고 plug-in이 수행하는 명령을 goal이라고 한다.

 

요약하자면 빌드 순서는 Compile - Test - Package 이다.

Clean -> init -> compile -> test-compile -> test -> package -> integration-test -> verify -> install -> deploy -> site

 

 

2. Maven 설정 파일

 

1) settings.xml

  • Maven build tools과 관련된 설정을 담당한다.
  • MAVEN_HOME/conf 에 위치 ( *MAVEN_HOME은 환경변수에 설정한 경로)

 

2) pom.xml

하나의 자바 프로젝트에 빌드 툴로 maven을 설정했다면, 프로젝트 최상위 디렉토리에 "pom.xml" 이라는 파일이 생성되었을 것이다. pom.xml은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분이다.

꼭 pom.xml이라는 이름을 가진 파일이 아니라 다른 파일로 지정할 수도 있다. (ex> mvn -f ooo.xml test) 

 

[pom.xml Element]

<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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kr.or.connect</groupId>
    <artifactId>examples</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mysample</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
  • project : pom.xml 파일의 최상위 루트 엘리먼트(Root Element)이다.
  • modelVersion : POM model의 버전이다.
  • groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.
  • artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정한다. Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성된다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성된다.
  • packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정한다. jar, war, ear 등이 해당된다.
  • version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용한다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 한다.
  • name : 프로젝트의 이름이다.
  • url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능한다.

해당 엘리먼트 안에 필요한 라이브러리를 지정하게 된다.

 

 


#References

https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80

https://cheershennah.tistory.com/151

https://jeong-pro.tistory.com/168

반응형

'Java > Maven' 카테고리의 다른 글

[Maven] mvn clean install  (0) 2022.09.22
Maven repository 설정  (0) 2022.08.03