With AI

Maven이란?

  • -
반응형

 

Maven이란?

Maven은 아파치 소프트웨어 재단(Apache Software Foundation)에서 개발한 프로젝트 빌드(Build), 의존성 관리(Dependency Management), 프로젝트 관리(Project Management) 도구입니다.
Java 기반 프로젝트에서 널리 사용되며, 프로젝트의 라이프사이클을 자동화하고 일관된 빌드 시스템을 제공합니다.


1. Maven의 주요 특징

1-1) 프로젝트 빌드(Build) 자동화

  • Maven을 사용하면 컴파일, 테스트, 패키징, 배포 등의 빌드 작업을 자동화할 수 있습니다.
  • 프로젝트의 라이프사이클을 정의하여 일관된 빌드 방식을 유지할 수 있습니다.

1-2) 의존성 관리(Dependency Management)

  • pom.xml을 사용하여 외부 라이브러리(JAR 파일) 의존성을 관리할 수 있습니다.
  • 중앙 저장소(Maven Central Repository)에서 자동으로 필요한 라이브러리를 다운로드하여 프로젝트에 추가합니다.

1-3) 일관된 디렉토리 구조 제공

  • Maven은 표준 디렉토리 구조를 제공하여, 모든 Maven 프로젝트가 동일한 폴더 구조를 따르도록 유도합니다.

1-4) 플러그인 기반(Plugin-based) 아키텍처

  • Maven은 다양한 플러그인을 지원하며, 필요에 따라 추가할 수 있습니다.
  • 예: maven-compiler-plugin, maven-surefire-plugin, maven-deploy-plugin 등

1-5) 멀티 모듈(Multi-module) 프로젝트 지원

  • 여러 개의 서브 프로젝트(모듈)를 포함하는 멀티 모듈 프로젝트를 쉽게 관리할 수 있습니다.

 

2. Maven 설치 및 설정

Maven을 사용하려면 먼저 설치해야 합니다.

2-1) Maven 설치 방법

① Windows

  1. Maven 공식 사이트에서 최신 버전을 다운로드합니다.
  2. 압축을 해제하고, MAVEN_HOME 환경 변수를 설정합니다.
  3. PATH 변수에 MAVEN_HOME/bin을 추가합니다.
  4. cmd에서 버전 확인:
mvn -version​

② Linux/macOS

 
sudo apt install maven  # Ubuntu
brew install maven      # macOS (Homebrew 사용)

 

3. Maven 프로젝트 구조

Maven 프로젝트는 기본적으로 아래와 같은 디렉토리 구조를 따릅니다.

my-maven-project
│── src
│   ├── main          # 애플리케이션 소스 코드
│   │   ├── java      # Java 코드
│   │   └── resources # 설정 파일, 정적 리소스
│   ├── test          # 테스트 코드
│   │   ├── java
│   │   └── resources
├── pom.xml           # 프로젝트 설정 파일
└── target            # 빌드된 결과물 (JAR, WAR 파일)

 

 

4. pom.xml 파일의 역할

Maven 프로젝트의 핵심 설정 파일은 pom.xml입니다.

4-1) 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
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>  <!-- 프로젝트 그룹 ID -->
    <artifactId>my-maven-app</artifactId>  <!-- 프로젝트 이름 -->
    <version>1.0.0</version>  <!-- 프로젝트 버전 -->
    <packaging>jar</packaging>  <!-- 빌드 결과물 타입 -->

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.0</version>
        </dependency>
    </dependencies>

</project>

4-2) 주요 태그 설명

태그 설명
<groupId> 프로젝트의 그룹 ID (일반적으로 패키지 네임스페이스)
<artifactId> 프로젝트 이름
<version> 프로젝트 버전
<packaging> 프로젝트 패키징 형식 (jar, war)
<dependencies> 의존성(라이브러리) 목록

 

5. Maven 빌드 명령어

Maven은 mvn 명령어를 사용하여 프로젝트를 빌드합니다.

5-1) 프로젝트 생성

 
mvn archetype:generate -DgroupId=com.example -DartifactId=my-maven-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

5-2) 프로젝트 빌드

mvn clean package
  • clean: target/ 폴더 삭제
  • package: JAR 또는 WAR 파일 생성

5-3) 의존성 다운로드

mvn dependency:resolve

5-4) 실행 가능한 JAR 빌드

mvn package
java -jar target/my-maven-app-1.0.0.jar

5-5) 테스트 실행

mvn test

5-6) 로컬 저장소에 라이브러리 설치

mvn install

 

6. Maven 저장소(Repository)

Maven은 라이브러리를 다운로드하고 관리하는 저장소(Repository)를 사용합니다.

6-1) 저장소 종류

종류 설명
로컬 저장소(Local Repository) 사용자 PC의 ~/.m2/repository/에 저장
중앙 저장소(Central Repository) Maven 공식 저장소 (Maven Central)
원격 저장소(Remote Repository) 기업 내부에서 관리하는 사설 저장소 (예: Nexus)

6-2) 의존성 캐시 확인

ls ~/.m2/repository

 

7. Maven 플러그인

Maven은 플러그인(Plugin)을 사용하여 기능을 확장할 수 있습니다.

7-1) 컴파일 플러그인

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

7-2) 패키징 플러그인

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>
mvn assembly:single

결론

Maven은 Java 프로젝트를 관리하는 강력한 도구로,

자동 빌드
의존성 관리
플러그인 확장
멀티 모듈 지원
등 다양한 기능을 제공합니다.

반응형

'With AI' 카테고리의 다른 글

웹 서버 Apache와 Nginx  (0) 2025.02.26
MySQL과 MariaDB의 관계  (0) 2025.02.25
Gradle이란?  (0) 2025.02.23
MyBatis와 JPA의 관계  (1) 2025.02.21
Flutter에서 사용되는 Riverpod  (0) 2025.02.20
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.