Apache Maven은 pom.xml(Project Object Model) 기반의 Java 빌드/의존성 관리 도구다. 표준화된 프로젝트 구조와 빌드 생명주기를 제공한다.
pom.xml 기본 구조
xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
<spring.version>3.2.0</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
빌드 생명주기
validate → compile → test → package → verify → install → deploy
# 자주 쓰는 명령
mvn clean install # 클린 빌드 + 로컬 저장소 설치
mvn test # 테스트 실행
mvn package -DskipTests # 테스트 생략하고 패키징
mvn dependency:tree # 의존성 트리
mvn versions:display-dependency-updates # 업데이트 가능 목록
의존성 스코프
| 스코프 | 컴파일 | 테스트 | 런타임 | 배포 포함 |
|---|
| compile | O | O | O | O |
| test | X | O | X | X |
| runtime | X | O | O | O |
| provided | O | O | X | X |
멀티 모듈
xml
<!-- 부모 pom.xml -->
<modules>
<module>core</module>
<module>api</module>
<module>web</module>
</modules>
<!-- 자식 pom.xml -->
<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
관련 개념