Maven
아파치 메이븐 Apache Maven은 소프트웨어 프로젝트 관리 및 이해 도구입니다. 프로젝트 객체 모델(POM)의 개념을 기반으로 하는 Maven은 정보의 중앙에서 프로젝트의 빌드, 보고 및 문서를 관리할 수 있습니다.
즉 메이븐은 아파치에서 개발한 자바용 프로젝트 관리 도구로, 한번에 여러 프로젝트를 빌드, 게시 및 배포할 수 있는 오픈 소스 빌드 툴이다.
자바 프로젝트에 많은 dependency, 빌드, 요구사항이 포함되어 있으면 이 모든 것들을 직접 처리하는 것은 매우 어렵고 지치는 일이다. 메이븐은 이를 도와주는 도구로, 의존성 추가, 프로젝트 클래스 패스 관리, war 및 jar파일의 자동 생성 등 여러 작업은 수행해주는 빌드 관리 도구라고 할 수 있다.
그렇다면 프로젝트 객체 모델(POM)은 무슨 뜻일까?
POM
POM(프로젝트 객체 모델; Project Object Model)은 메이븐의 기본 작업 단위로, 메이븐이 프로젝트를 빌드할 때 사용되는 프로젝트와 그 구성에 대한 세부 정보들을 담고 있는 XML파일이다.
이 POM 파일이 바로 Maven을 작동시키는 핵심 파일이다. 이 XML파일은 dependency(의존성), 소스의 위치(디렉토리), 플러그인, 버전 등 다양한 정보를 담고 있다. 메이븐 명령을 실행하려면 메이븐에게 POM파일을 줘야 하고, 메이븐은 구성과 작업 수행을 위해 pom.xml파일을 읽는다.
pom.xml
파일에 들어가는 요소에는 다음과 같은 것들이 있다.
<modelVersion>4.0.0</modelVersion>
<groupId> com.project.loggerapi </groupId>
<artifactId>LoggerApi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
메이븐 dependency에 대해서는 🔗 Dependency를 참조.
Repository
메이븐 Repository는 일부 메타데이터가 포함된 패키징된 JAR파일의 디렉토리이다.
쉽게 말하면 저장소라고 할 수 있다. repository는 3개 유형으로 구분된다.
로컬은 개발자 컴퓨터의 디렉터리로, 메이븐이 다운로드하는 모든 dependency가 여기에 있다. 기본적으로 maven 로컬 저장소는 user_home/m2 디렉토리다.
중앙 저장소는 Maven 커뮤니티로, 필요로 하는데 로컬에서 찾을 수 없는 dependency를 이곳에서 찾는다. 찾은 다음 이를 로컬 repository로 다운로드한다. https://search.maven.org/#browse 여기서 cetral repository를 볼 수 있다.
원격 저장소는 Maven이 dependency를 다운로드할 수 있는 웹 서버의 리포지토리이다. 종종 조직 내부의 프로젝트를 호스팅하는 데 사용된다. 그런 다음 Maven은 이러한 dependency를 로컬 저장소에 다운로드한다.
장점
Maven은 pom 파일을 읽어 프로젝트에 필요한 모든 의존성을 자동으로 추가할 수 있습니다.
Maven을 사용하여 요구 사항에 따라 jar, war 등으로 프로젝트를 쉽게 빌드할 수 있습니다.
Maven을 사용하면 다양한 환경에서 프로젝트를 쉽게 시작할 수 있으며 의존성 주입, 빌드, 처리 등을 처리할 필요가 없습니다.
새 의존성을 추가하는 것은 매우 쉽습니다. pom 파일에 dependency 코드를 작성하기만 하면 됩니다.
단점
Maven은 작업을 위해 시스템에 maven 설치가 필요하고 ide에는 maven 플러그인이 필요합니다.
기존 dependency에 대한 maven 코드를 사용할 수 없는 경우, maven을 사용하여 해당 의존성을 추가할 수 없습니다.