본문 바로가기
FullStack/21. Java

Maven 란

by nakanara 2022. 2. 15.
반응형

Maven

Maven은 프로젝트 객체 모델(POM) 개념을 기반으로 프로젝트를 정형화된 배포 유형(jar, war 등)으로 빌드(컴파일, 테스트, 검사, 배포) 과정을 균일하게 쉽게 구성하고 관리하는 도구입니다.

장점

  • 빌드 프로세스를 손쉽게 구성
  • 정형화된 빌드 프로세스 제공
  • 양질의 프로젝트 정보 제공
  • 라이브러리 의존성 관리

Maven 단계

  • validate: 프로젝트의 정보 검증
  • compile: 프로젝트 코드 컴파일
  • test: 소스 코드 테스트
  • package: 컴파일된 소스를 설정된 패키지 유형에 따라 처리
  • verify: 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
  • install: 로컬 저장소로 배포
  • deploy: 원격 저장소에 최종 패키지 배포
  • clean: 이전 빌드에서 생성된 코드 정리(targer 폴더)

POM.xml 파일 구성


<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">
  <modelVersion>4.0.0</modelVersion>

  <!-- The Basics -->
  <groupId>com.nakanara</groupId>
  <artifactId>example</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <!-- More Project Information -->
  <name>예제</name>
  <description>예제입니다</description>
  <url>https://nakanara.tistory.com</url>
  <inceptionYear>2022</inceptionYear>

  <!-- 라이선스 -->
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>

  <!-- 저장소 -->
  <repositories>
    <repository>
        <id>Central</id>
        <name>repo1.maven.org</name>
        <url>https://repo1.maven.org/maven2/</url>
    </repository>
  </repositories>

  <!-- 변수 설정 -->
  <properties>
    <junit.version>5.2.0.RELEASE</junit.version>
  </properties>


  <!-- 종속성 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>

    <!-- 로컬에서 제공할 경우 -->
    <dependency>
      <groupId>com.nakanara</groupId>
      <artifactId>client</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/client.jar</systemPath>
  </dependency>

  </dependencies>


</project>

 

  •  Basics
    • modelVersion: Maven POM 모델 버전
    • groupId: 프로젝트 고유 식별자, 패키지 명과 달라도 되지만 일반적으로 패키지 명
    • artifactId: 프로젝트 고유 ID
    • version: 프로젝트 버전
    • packaging: 프로젝트 패키징 유형(pom, jar, maven-plugin, ejb, war, ear, rar), 패키지 유형에 따라 실행 요소가 달라짐 (https://maven.apache.org/ref/3.8.4/maven-core/default-bindings.html)
  • Information
    • name: 프로젝트 명
    • description: 프로젝트 설명
    • url: 프로젝트 홈페이지
    • inceptionYear: 프로젝트 시작 연도
    • licenses: 관련 라이선스 표시
  • repositories: 라이브러리를 검색할 저장소 설정
  • properties: 속성 설정
    해당 속성을 사용할 경우 ${속성명}으로 사용
  • dependencies: 종속성 설정(groupId, artifactId, version 필수)
    • groupId: 라이브러리 고유 식별자
    • artifactId: 라이브러리 고유 ID
    • version: 라이브러리 버전
    • scope: 라이브러리 적용 범위
      • compile: 기본 값, 해당 프로젝트에 종속성을 가짐
      • provided: 컴파일에 참고하지만, 패키징에서 제외, 런타임에서는 JDK 또는 컨테이너가 제공
      • runtime: 패키징에서 제외, 컴파일에는 필요하지 않지만 런타임에는 필요
      • test: 테스트 단계에서만 필요
      • system: 저장소에서 관리되지 않으며 명시적으로 jar 위치 표시
        systemPath: system일 경우 jar 경로 설정

Maven 설정 파일

setting.xml은 기본적으로 MAVEN_HOME/conf 폴더 안에 존재하고 있으며, 일반적으로 ${user.home}/.m2/settings.xml 위치하고 있다.

용량이 부족할 경우 설정된 localRepository를 변경하여 원하는 로컬 저장소로 변경할 수 있다. 또한 포맷할 경우 관련 라이브러리 전체가 다시 다운로드되므로 사전에 로컬 저장소를 백업해두면 설치에 편리하다.

 <localRepository>/path/to/local/repo/</localRepository>

참고

반응형