Maven Build System

2023. 5. 1. 14:06Spring Framework

개요

메이븐은 프로젝트 객체 모델(Project Object Model)이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명 주기 관리 기능 등을 제공하는 프로젝트 관리 도구입니다. 또한 플러그인을 기반으로 소스 코드로부터 배포 가능한 산출물을 만들어 내는 빌드 기능 뿐만 아니라 리포팅 및 documentation 작성 기능 등을 제공합니다.

 

설명

Maven 특징

Maven 장점 Maven 단점
• 뛰어난 의존성 관리
- 의존성 자동 업데이트
-저장소를 통한 라이브리 일괄 관리
• Repository 관리의 불편함
- Maven 프로젝트의 급속한 발전으로 central repository가 제공하는 라이브러리들이
빠르게 증가하고 있으나 아직 3rd 파티 라이브러 등 미제공 라이브러리들이 있음
• 모든 프로젝트에 걸쳐 쉽게 적용 가능한 일관적인 사용법 • pom.xml 파일 관리
- 메이븐 프로젝트 관리에 대한 모든 내용이
pom.xml 파일에 담기게 되믄로 길고 장황하게 될 수 있음
• 라이브러리 및 메타 데이터 저장을 위한 지속적으로 확장 되고 있는 저장소
• 프로젝트에 특화된 복잡한 빌드 기능 제약
- 메이븐 프로젝트 특성상 소프트웨어 빌드에 통용되는
라이프 사이클을 제공하고 있어 세부 항목 또는 특화된 빌드 환경에 대한 지원이 미약함.
• 쉽게 작성 가능한 플러그 인을 통한 확장성
• 동시에 다수의 프로젝트 핸들링 할 수 있는 쉬운 설정 기반의 메커니즘
• 간단한 설정을 통한 배포 관리
• Java, C++ 등 다수의 프로그래밍 언어 지원

 

Maven 아키텍처

Maven은 프로젝트 전체 내용에 대한 기술 및 설정을 담당하는 POM과 라이브러리(Maven에서는 artifact라 호칭함) 관리에 대한 dependency/repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드 생명 주기를 다루는 lifecycle 및 관련된 plugin들과의 연동을 다루는 부분으로 구성됩니다.

 

프로젝트 객체 모델: 메이븐 엔진 내장 + POM.xml 파일에서 선언적으로 제공
종속성 관리 모델: 로컬 및 리모트 저장소를 이용
프로젝트 생명 주기 모듈: 메이븐 엔진은 플러그인을 통해 파일을 다루는 거의 모든 작업을 수행

 

프로젝트 객체 모델(POM)

POM은 프로젝트 구조와 내용을 설명하고 있으며 pom.xml 파일에 프로젝트 관리 및 빌드에 필요한 환경 설정, 의존성 관리 등의 정보들을 기술합니다.

프로젝트의 세부 메타 데이터 정보를 포함한다.
버전 및 설정 관리, 빌드 환경, 라이브러리 저장소 및 의존성 등

 

 

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>
    
    <groupId>com.intheeast</groupId>
    <artifactId>JDBCAPIsTutorials</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 필요한 경우 종속성 추가 -->
        <dependency>
	    	<groupId>mysql</groupId>
	    	<artifactId>mysql-connector-java</artifactId>
	    	<version>8.0.28</version>
	</dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Compiler plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <release>17</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

Maven Repository

Repository는 artifact들의 저장소로 로컬 및 리모트 repository로 구성되며 프로젝트는 pom.xml에서 선언한 dependency들을 저장소로부터 불러와서 사용합니다.

1. Maven 설치 시 로컬에 Maven artifact들을 저장하고 관리하는 repository가 자동으로 구성됩니다.
    ⦁ 기본 설정은 C:\Users\xxx\.m2\repository\repository 디렉토리에 구성됩다.

2. Maven Remote repository
    ⦁ Maven에서 제공하는 central respositoty와 각 기업 또는 organization에서 제공하고 있는
      리모트 repository들이 있으며 개발자는 환경 설정을 통해 하나 이상의 외부 repository에서 필요로 하는
      artifact들을 다운로드 받아 사용할 수 있습니다.

3. repository 호출 프로세스
    ⦁ 일반적인 개발에 주로 사용되는 라이브러리 관리 메커니즘은, 필요한 라이브러리를 프로젝트
       내부 디렉터리에 담고 path 설정을 통해 사용하고 있으나 Maven에서는 의존성 설정 메커니즘
       (라이브러리를 설정 파일에 선언하여 사용함) 통해 사용하고 관리합니다.
    3.1 프로젝트의 pom.xml에서 라이브러리 선언
    3.2 개발자 로컬 리포지토리에서 선언한 라이브러리 검색
        ⦁ 존재 시 프로젝트에 라이브러리 cache
        ⦁ 존재하지 않을 경우 리모트 리포지토리에 요청
    3.3 리모트 리포지토리에서 선언한 라이브러리 검색
       ⦁ 로컬 리포지토리는 리모트 리포지토리에서 검색된 artifact를 내려 받아 저장한다.

 

Maven Local Repository

 

  • local repository : artifact들을 로컬 파일 시스템에 cache하는 기능으로 원격 repository에서 다운로드 받아 artifact들을 저장하고 관리한다.
  • remote repository :  주로 HTTP 서버로 3rd 파티에서 제공하는 artifact들을 제외한 거의 모든 artifact들을 제공한다.

Maven Remote Repository

[https://mvnrepository.com/]

이 웹사이트는 개발자들이 필요로 하는 라이브러리의 메타데이터를 쉽게 검색하고 다운로드할 수 있도록 도와줍니다. 주요 기능과 특징은 다음과 같습니다:

  1. 라이브러리 검색: 다양한 라이브러리와 모듈을 검색할 수 있습니다. 특정 키워드, 그룹 ID, 아티팩트 ID 등을 입력하여 관련된 종속성을 쉽게 찾을 수 있습니다.
  2. 버전 관리: 각 라이브러리의 여러 버전을 제공하며, 특정 버전의 메타데이터, 릴리스 날짜, 변경 사항 등을 확인할 수 있습니다.
  3. 종속성 정보 제공: 각 라이브러리 페이지는 해당 라이브러리를 프로젝트에 추가하는 데 필요한 Maven, Gradle, SBT 등의 종속성 정보를 제공합니다.
  4. 인기 라이브러리: 많이 사용되는 인기 라이브러리 목록을 제공하여, 최신 트렌드와 추천 라이브러리를 쉽게 찾을 수 있습니다.
  5. 문서화 및 링크: 라이브러리에 대한 자세한 문서, 프로젝트 홈페이지 링크, 소스 코드 저장소 링크 등을 제공합니다.
  6. 커뮤니티 피드백: 라이브러리에 대한 사용자 리뷰와 평가를 통해 품질을 가늠할 수 있습니다.
    이 웹사이트는 Java 개발자들이 프로젝트에서 필요로 하는 다양한 종속성을 효율적으로 관리하고 통합할 수 있도록 도와주는 중요한 도구입니다.

 

Maven Directory 구조

Spring Tool Suite IDE에서 Maven 기반 자바 프로젝트를 생성할 때, 다음과 같이 첫번째 체크 박스를 체크해서 프로젝트를 생성해 주세요

 

 

메이븐은 Best practices을 기반으로 정규화된 디렉터리 구조를 제공하고 있으며 모든 소스 파일들은 /src 디렉터리 밑에, 그리고 빌드된 output은 /target 디렉터리 밑에 위치한다.

Maven 표준 디렉토리 구조

 

스프링 부트 프로젝트 기본 구조 (Maven 사용 시)

my-spring-boot-app
|-- pom.xml
|-- src
|   |-- main
|   |   |-- java
|   |   |   |-- com
|   |   |       |-- example
|   |   |           |-- MySpringBootApplication.java
|   |   |-- resources
|   |       |-- application.properties
|   |-- test
|       |-- java
|       |   |-- com
|       |       |-- example
|       |           |-- MySpringBootApplicationTests.java
|       |-- resources
|-- target


주요 디렉토리 및 파일 설명

  • src/main/java: 애플리케이션의 주요 소스 코드가 위치합니다.
  • src/main/resources: 애플리케이션 리소스 파일 (예: application.properties 설정 파일)이 위치합니다.
  • src/test/java: 애플리케이션의 테스트 소스 코드가 위치합니다.
  • src/test/resources: 테스트 리소스 파일이 위치합니다.
  • target: Maven 빌드 결과물이 저장되는 디렉토리로, 컴파일된 클래스 파일, JAR 파일, WAR 파일 등이 여기에 포함됩니다.
  • pom.xml: Maven 빌드 설정 파일로, 프로젝트의 종속성, 플러그인, 빌드 설정 등을 정의합니다.

 

가상 디렉토리

1. JRE System Library

Maven 프로젝트 디렉토리 구조에서 JRE System Library는 Java Runtime Environment (JRE) 관련 라이브러리들을 포함하는 가상 디렉토리입니다. 이 디렉토리는 Java 애플리케이션이 실행될 때 필요한 기본적인 Java 클래스 라이브러리들을 나타내며, 일반적으로 IDE(통합 개발 환경)에서 표시됩니다. 예를 들어, Eclipse와 같은 IDE에서 Maven 프로젝트를 열면, 프로젝트 탐색기에서 JRE System Library라는 항목을 볼 수 있습니다.

주요 기능 및 역할

  1. Java 기본 클래스 포함: java.lang, java.util, java.io 등과 같은 표준 Java 클래스 라이브러리를 포함합니다. 이러한 라이브러리들은 모든 Java 프로그램에서 기본적으로 사용되는 클래스들을 제공합니다.
  2. JRE 버전 관리: JRE System Library는 프로젝트가 특정 JRE 버전을 대상으로 빌드되고 실행될 것임을 나타냅니다. 이를 통해 프로젝트가 어떤 Java 버전과 호환되는지를 명확히 할 수 있습니다.
  3. 컴파일 및 실행 환경 설정: IDE에서 JRE System Library를 통해 프로젝트의 컴파일 및 실행 환경을 설정할 수 있습니다. 이는 Maven의 pom.xml 파일에 설정된 Java 버전과 일치해야 합니다.
  4. IDE 통합: Eclipse와 같은 IDE에서는 프로젝트의 Java 빌드 경로에 JRE System Library를 자동으로 추가하여 개발자가 프로젝트를 설정하는 데 도움이 됩니다. 이를 통해 프로젝트의 코드가 JRE의 클래스에 접근할 수 있도록 합니다.

 

Maven과 JRE System Library의 관계
Maven 프로젝트의 경우, pom.xml 파일을 통해 프로젝트의 Java 버전을 명시할 수 있습니다. 예를 들어, 아래와 같이 maven-compiler-plugin을 사용하여 Java 버전을 설정할 수 있습니다:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>


이 설정을 통해 Maven은 프로젝트를 Java 8로 컴파일하고 실행하도록 설정하며, IDE는 이에 맞춰 JRE System Library를 설정합니다.

따라서 JRE System Library는 Maven 프로젝트의 Java 실행 환경을 정의하고 관리하는 중요한 요소이며, 개발자가 프로젝트에서 필요한 기본적인 Java 클래스를 사용할 수 있도록 지원합니다.

 

2. Maven Dependencies

Maven Dependencies는 Maven 프로젝트 디렉토리 구조에서 외부 라이브러리와 모듈 종속성을 나타내는 가상 디렉토리입니다. 이 디렉토리는 pom.xml 파일에 정의된 모든 종속성을 포함하며, 프로젝트 빌드와 실행에 필요한 라이브러리들을 보여줍니다.

주요 기능 및 역할

  1. 종속성 관리: Maven Dependencies는 pom.xml 파일에 정의된 종속성(dependencies)들을 나타냅니다. Maven은 프로젝트 빌드 과정에서 필요한 외부 라이브러리를 중앙 저장소(Maven Central Repository)나 커스텀 저장소에서 다운로드하여 이 디렉토리에 추가합니다.
  2. 라이브러리 제공: 프로젝트에 필요한 외부 라이브러리들을 제공하여 컴파일, 테스트, 실행 단계에서 사용할 수 있도록 합니다. 예를 들어, 로깅 라이브러리인 Log4j, JSON 파싱 라이브러리인 Jackson 등의 라이브러리를 포함할 수 있습니다.
  3. 트랜스티브 종속성 관리: Maven은 직접 선언된 종속성뿐만 아니라, 이러한 종속성들이 필요로 하는 다른 라이브러리(트랜스티브 종속성)도 자동으로 해결하고 다운로드합니다. Maven Dependencies는 이 모든 트랜스티브 종속성도 포함합니다.
  4. 버전 관리: 각 라이브러리의 특정 버전을 관리합니다. Maven은 동일한 라이브러리의 여러 버전이 충돌하지 않도록 관리하며, pom.xml 파일에 설정된 버전을 기준으로 종속성을 처리합니다.


Maven Dependencies의 예시
pom.xml 파일에 종속성을 추가하는 예시는 다음과 같습니다:

<dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>cohttp://m.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.5</version>
    </dependency>
</dependencies>


위의 예시에서는 commons-lang3와 jackson-databind 라이브러리를 종속성으로 추가하였습니다. Maven은 이 종속성들을 다운로드하여 Maven Dependencies 섹션에 추가합니다.

IDE 통합
Eclipse, Spring Tool Suite, IntelliJ IDEA와 같은 통합 개발 환경(IDE)은 Maven 프로젝트를 열 때 Maven Dependencies 섹션을 자동으로 생성하여, pom.xml 파일에 정의된 모든 종속성을 이 디렉토리에서 볼 수 있게 합니다. 이를 통해 개발자는 프로젝트에서 사용하는 모든 외부 라이브러리와 그 버전을 쉽게 확인하고 관리할 수 있습니다.

종속성 충돌 해결
Maven은 종속성 충돌을 해결하기 위한 여러 메커니즘을 제공합니다. pom.xml 파일에서 특정 라이브러리의 버전을 명시하거나, dependencyManagement 섹션을 사용하여 종속성 버전을 중앙에서 관리할 수 있습니다. 이를 통해 프로젝트에서 사용되는 라이브러리들의 호환성을 유지하고 충돌을 방지할 수 있습니다.

요약하면, Maven Dependencies는 Maven 프로젝트에서 외부 라이브러리 종속성을 관리하고, 프로젝트 빌드와 실행에 필요한 모든 라이브러리를 포함하여 개발자가 쉽게 접근하고 사용할 수 있도록 도와주는 중요한 기능입니다.

 

추가 디렉토리

스프링 부트 프로젝트에서 추가 디렉토리를 사용하고자 할 때는 주로 아래와 같은 용도로 사용할 수 있습니다:
1. src/main/resources/static: 정적 자원(HTML, CSS, JavaScript 파일 등)이 위치합니다.
2. src/main/resources/templates: 템플릿 파일(Thymeleaf, Freemarker 등)이 위치합니다.
3. src/main/resources/META-INF: 메타데이터 파일이 위치합니다.

 

Maven 기본 생명 주기

메이븐 빌드는 소프트웨어 프로젝트의 핵심적인 빌드 라이플 사이클 개념을 따르고 있으며, 빌드 초기화 단계부터 artifact의 배포까지의 생명 주기를 정의하고 있습니다.

Maven 생명 주기 단계는 각각의 플러그인과 바인딩 되어 실제로 바인딩된 플러그인이 명령을 실행 하며 단계 순서에 따라 순차적으로 빌드가 실행되어 개발자가 실행한 명령을 수행합니다.
예) mvn install 명령을 실행하면 generate-sources 단계부터 compile, test 명령 등을 거쳐 install 명령을 실행합니다.
Life Cycle Step Description
validate 현재 설정과 POM의 내용이 유효한지 확인.
generate-
sources
코드 생성기가 이 다음의 단계들에서 컴파일되고 처리할 소스 코드를 생성하기 시작하는 순간.
compile 소스 코드를 컴파일. 컴파일된 클래스들은 타겟 디렉토리 트리 구조에 저장됨.
test 컴파일된 단위 테스트를 실행하고 그 결과를 표시.
package 실행 가능한 바이너리 파일들을 WAR나 JAR같은 배포용 압축 파일로 묶음.
install 압축 파일로 로컬 메이븐 저장소에 추가.
deploy 압축 파일을 원격 메이븐 저장소에 추가.

 

 

 

Maven 2 기본 생명주기 단계

생명주기 단계 설명
validate 현재 설정과 POM의 내용이 유효한지 확인한다. 이 과정은 POM.XML 파일 트리 구조를 검증.
initialize 빌드 사이클에서 수행할 주요 작업 이전에 초기화를 할 수 있는 순간.
generate-sources 코드 생성기가 이 다음의 단계들에서 컴파일 되고 처리할 소스 코드를 생성하기 시작하는 순간
process-sources 소스의 파싱, 수정, 변경을 제공한다. 일반 코드 또는 생성된 코드 모두 여기서 처리.
generate-resources 소스 코드가 아닌 리소스를 생성하는 단계. 보통 메타데이터 파일과 설정 파일을 포함.
process-resources 이전 과정의 소스 코드가 아닌 리소스 파일들을 다룸. 이 단계에서 리소스 파일들이 수정, 변경 재배치 됨.
compile 소스 코드를 컴파일한다. 컴파일된 클래스들은 카깃 디렉터리 트리 구조에 저장.
process-classes 클래스 파일 변환과 개선 단계를 다룸. 바이트 코드 위버(weaver)와 instrument 도구가 동작하는 단계.
generate-test-sources 단위 테스트 코드를 생성하는 모조가 동작하는 순간.
process-test-sources 컴파일하기 전에 테스트 소스 코드에 필요한 작업을 수행. 이 단계에서 소스 코드는 수정, 변환 또는 복사될 수 있음.
generate-test-resources 테스트 관련 리소스 생성을 허용.
process-test-resources 테스트 관련 리소소의 처리, 변환, 재배치가 가능.
test-compile 단위 테스트 소스 코드를 컴파일.
test 컴파일된 단위 테스트를 싱행하고 그 결과를 표시.
package 실행 가능한 바이너리 파일들을 JAR나 WAR 같은 배포용 압축 파일로 묶음.
pre-integration-test 통합 테스트를 준비. 이 경우 통합 테스트는 실제 배치 환경의 코드를 테스트 하는 것을 말함. 이 단계에서 위에서 묶은 압축 파일을 서버에 배치할 수 있음.
integration-test 실제 통합 테스트를 수행.
post-integration-test 통합 테스트 준비 상태를 해제. 이것은 테스트 환경의 리셋 또는 재초기화 과정을 포함할 수 있음.
verify 배치 가능한 압축 파일의 무결성과 유효성을 검증. 이 과정 이후에 압축 파일들이 설치 됨.
install 압축 파일을 로컬 메이븐 디렉터리에 추가. 이로 인해 이것에 의존하는 다른 모듈들을 사용할 수 있게 됨.
deploy 압축 파일을 원격 메이븐 디렉터리에 추가. 더 많은 사용자들이 이 artifact를 사용할 수 있게 됨.

 

Plug-in

Maven의 플러그인(plugins)은 빌드 프로세스의 다양한 단계를 수행하기 위해 사용되는 추가 기능 모듈입니다. Maven은 자체적으로 프로젝트 빌드를 관리하는 기본적인 기능만을 제공하고, 실제 빌드 과정에서 발생하는 여러 작업은 플러그인을 통해 처리됩니다. 예를 들어, 컴파일, 테스트 실행, 패키징, 배포, 코드 분석 등의 작업은 모두 각기 다른 플러그인을 사용하여 수행됩니다.

Maven 플러그인의 주요 개념

1. goal: 플러그인이 실행하는 특정 작업을 의미합니다. 하나의 플러그인은 여러 개의 goal을 가질 수 있습니다. 예를 들어, maven-compiler-plugin에는 compiletestCompile 같은 goal이 있습니다.

2. Default Plugins: Maven은 특정 작업을 위해 디폴트로 제공되는 플러그인이 있습니다. 예를 들어, 소스 코드를 컴파일하기 위해 maven-compiler-plugin이 디폴트로 제공됩니다.

3. Custom Plugins: 사용자는 자신의 요구에 맞는 플러그인을 추가하거나 기존 플러그인의 동작을 재정의할 수 있습니다. 이를 위해 pom.xml 파일에서 플러그인을 설정합니다.

4. Build Lifecycle: Maven의 빌드 라이프사이클은 여러 단계(예: validate, compile, test, package, install, deploy)로 구성되며, 각 단계에서 특정 플러그인이 호출됩니다.

 

플러그인 예시

  • maven-compiler-plugin: Java 소스 파일을 컴파일합니다.
  • maven-surefire-plugin: 유닛 테스트를 실행합니다.
  • maven-jar-plugin: 컴파일된 코드를 JAR 파일로 패키징합니다.
  • maven-clean-plugin: 이전 빌드에서 생성된 파일을 삭제합니다.

플러그인 설정 예시

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>


위의 예시에서 maven-compiler-plugin을 사용하여 Java 8 소스 코드와 바이트코드를 컴파일하는 방법을 보여주고 있습니다.
이처럼 Maven 플러그인은 빌드 과정의 다양한 작업을 자동화하고 간소화하는 데 중요한 역할을 합니다.

 

Pom.xml 태그

<properties>

Maven의 properties 섹션은 pom.xml 파일에서 공통적으로 사용되는 값들을 변수로 정의하여 관리하는 부분입니다. properties 섹션에 정의된 값들은 다른 설정에서 ${propertyName} 형태로 참조할 수 있습니다. 이를 통해 설정 값들을 중앙에서 관리하고, 필요할 때 쉽게 변경할 수 있게 됩니다.

properties 섹션의 주요 용도

1. 버전 관리: 특정 의존성(dependency)이나 플러그인의 버전을 한 곳에서 관리하여 여러 곳에서 참조할 수 있습니다.
2. 컴파일러 설정: 자바 버전 등과 같은 빌드 설정을 한 번에 관리할 수 있습니다.
3. 환경 변수 관리: 데이터베이스 접속 정보나 파일 경로 등 환경 설정 값을 중앙에서 관리할 수 있습니다.

위 예시의 properties 섹션

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>


위 properties 섹션에서는 두 가지 속성이 정의되어 있습니다:

  • maven.compiler.source: 자바 소스 코드의 버전을 지정합니다. 예를 들어, Java 17을 사용하여 소스를 컴파일합니다.
  • maven.compiler.target: 생성된 바이트코드의 타겟 JVM 버전을 지정합니다. 이 경우에도 Java 17을 타겟으로 지정하고 있습니다.

이렇게 정의된 속성들은 Maven의 다른 섹션에서 ${maven.compiler.source}${maven.compiler.target}로 참조할 수 있습니다. 예를 들어, maven-compiler-plugin에서 이 값들을 참조하여 컴파일 소스와 타겟 버전을 설정합니다.

이처럼 properties 섹션은 중복되는 설정 값들을 줄이고, 관리하기 쉽게 해줍니다. 프로젝트가 커지거나 복잡해질수록 이 방식은 매우 유용하게 작용합니다.

 

org.codehaus.mojo

org.codehaus.mojo는 Maven 플러그인과 관련된 다양한 프로젝트를 관리하는 조직 중 하나입니다. 이 조직은 Maven 프로젝트의 빌드 프로세스를 확장하고 개선하는 데 사용되는 여러 유용한 플러그인을 제공합니다.

주요 특징
1. 플러그인 제공: org.codehaus.mojo는 여러 가지 Maven 플러그인을 제공하는데, 이들 플러그인은 Maven 빌드 주기를 확장하거나 특정 작업을 자동화하는 데 사용됩니다. 예를 들어, exec-maven-plugin은 자바 프로그램을 실행하거나 다른 명령을 실행하는 데 사용되며, sql-maven-plugin은 데이터베이스와 관련된 작업을 Maven 빌드 프로세스에 통합할 수 있게 해줍니다.

2. 오픈 소스: org.codehaus.mojo가 제공하는 플러그인들은 오픈 소스 프로젝트의 일환으로 개발되며, 커뮤니티에서 활발하게 유지 보수되고 있습니다.

3. 다양한 플러그인: org.codehaus.mojo 그룹 ID 아래에는 수많은 Maven 플러그인이 있으며, 이들은 다양한 빌드 관련 작업을 지원합니다. 예를 들어, 코드 품질 도구와의 통합, 문서 생성, 테스트 데이터베이스 설정 등 많은 기능을 포함합니다.

 

예시 플러그인

  • exec-maven-plugin: 자바 메인 클래스를 실행하거나 시스템 명령을 실행하는 데 사용됩니다. 이를 통해 빌드 과정에서 실행이 필요한 프로그램을 실행할 수 있습니다.
  • sql-maven-plugin: SQL 스크립트를 실행하거나 데이터베이스 작업을 자동화하는 데 사용됩니다. 데이터베이스 생성, 테이블 생성, 데이터 삽입 등을 Maven 빌드 주기에 통합할 수 있습니다.

이러한 플러그인들은 Maven을 사용하는 프로젝트에서 다양한 작업을 자동화하고, 복잡한 빌드 프로세스를 단순화하는 데 매우 유용합니다. org.codehaus.mojo는 특히 커뮤니티가 필요로 하는 다양한 기능을 제공하여 Maven 생태계의 중요한 부분을 구성합니다.

 

'Spring Framework' 카테고리의 다른 글

UML(Unified Modeling Language)  (0) 2023.06.10
POM.xml  (0) 2023.05.02
SOLID(객체 지향 설계 원칙)  (0) 2023.05.02
Chapter 7 프로젝트 설정 관련  (0) 2023.05.01
Separation of Concerns(관심사 분리)  (0) 2023.05.01