Maven은 Apache에서 개발한 자바 프로젝트 관리 도구이며, 빌드, 문서화, 보고, 의존성 관리, 릴리스, 배포 등과 같은 프로젝트 관리에 필요한 모든 기능을 제공한다.
핵심적으로 Maven은 프로젝트의 구조를 파악하는 pom.xml
이라는 중요한 파일을 사용한다.
이 파일에는 프로젝트가 필요로 하는 라이브러리와 그 버전, 빌드 설정, 플러그인 등이 정의되어 있으며, 이를 통해 Maven은 프로젝트에 필요한 라이브러리를 자동으로 다운로드하고, 이를 관리한다.
특히, Maven은 필요한 라이브러리뿐 아니라, 해당 라이브러리가 작동하는 데 필요한 다른 라이브러리들까지 자동으로 다운로드 받아주는 특징이 있다.
이는 라이브러리 간의 의존성 관리를 자동화하여 개발자가 복잡한 의존성 관리에서 벗어나, 비즈니스 로직에 집중할 수 있게 해준다.
Maven은 빌드 프로세스를 관리하기 위해 미리 정의된 라이프 사이클을 제공하며, 각 단계는 특정 목적을 가지고 있다.
또한 Maven의 기본 라이프 사이클에는 다음의 세 가지가 있다:
compile
, test
, package
, install
, deploy
등의 단계를 포함하고 있다.pre-clean
, clean
, post-clean
의 단계를 가지고 있다.pre-site
, site
, post-site
, site-deploy
의 단계를 가지고 있다.빌드는 소스 코드를 실행 가능한 소프트웨어 시스템으로 변환하는 과정을 말하며, 이 과정은 컴파일, 테스트, 패키징 등 여러 단계를 포함 한다.
Maven에서의 빌드 과정은 다음과 같다:
mvn compile
명령을 통해 자바 소스 코드를 바이트 코드로 컴파일 한다. 이 과정에서 Maven은 pom.xml
에서 정의한 라이브러리를 참조한다.mvn test
명령을 사용하여 단위 테스트를 실행한다. Maven은 JUnit과 같은 테스팅 프레임워크를 지원하며, 테스트 결과를 자동으로 생성한다.mvn package
명령을 통해 컴파일된 코드와 리소스 파일들을 JAR나 WAR와 같은 배포 가능한 형태로 패키징한다.mvn install
명령을 사용하면, 패키징된 아티팩트를 로컬 저장소에 설치한다. 이렇게 해서 다른 Maven 프로젝트에서 이 아티팩트를 참조할 수 있게 된다.mvn deploy
명령을 통해 아티팩트를 원격 저장소에 배포한다. 이렇게 배포된 아티팩트는 다른 개발자들이 사용할 수 있다.이렇게 Maven은 빌드 생명주기를 관리하며, 각 단계마다 필요한 작업을 자동으로 수행한다.
이를 통해 개발자는 빌드와 관련된 복잡한 작업들에서 벗어나 비즈니스 로직에 더 집중할 수 있으며, 이 모든 과정은 pom.xml
에 정의된 설정에 따라 수행된다.
Ant(앤트)
자바 프로젝트 빌드 도구로 가장 널리 사용되던 빌드 도구였다.
Eclipse에 기본적으로 탑재되었으며, XML 스크립트를 기반으로 하였는데, 최근에 나온 빌드 도구들과 달리 자동으로 라이브러리를 업데이트 하는 기능이 없어
현재는 주로 레거시 시스템에서만 사용된다.
Maven(메이븐)
Ant이후에 나온 자바 빌드 도구로 자동으로 라이브러리와 의존성을 관리하는 기능이 있다.
Ant와 마찬가지로 XML 스크립트를 기반으로 하며, pom.xml 파일로 의존성을 관리한다.
Maven에서는 라이프 사이클 개념이 도입되어 빌드 순서 등을 정의 할 수 있다.
Gradle(그래들)
가장 최근에 나온 자바 빌드 도구로 "Groovy (그루비)" 문법을 사용한다.
build.gradle에 스크립트를 작성하며, 대규모 프로젝트에서 복잡해지는 경향이 있는 XML 기반 스크립트에 비해 관리가 편하다는 장점을 갖는다.
Gradle은 현재 안드로이드 프로젝트의 표준 빌드 시스템으로 채택되어 있다고 한다.
이 파일은 프로젝트의 기본 정보와 빌드 설정을 담고 있으며, 프로젝트에 필요한 라이브러리와 그 버전, 빌드 플러그인, 프로젝트의 메타데이터 등을 정의한다.
pom.xml은 프로젝트의 루트 디렉토리에 위치하며, Maven의 빌드 프로세스를 제어한다.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.spring.app</groupId>
<artifactId>my-spring</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<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>
</project>
pom.xml
파일은 다음과 같은 주요 요소들을 포함한다:
<modelVersion>
: POM model의 버전이다. 현재는 4.0.0
을 사용한다.<groupId>
, <artifactId>
, <version>
: 프로젝트의 고유 식별자이다.<dependencies>
: 프로젝트가 사용하는 라이브러리와 그 버전을 명시한다.<build>
: 빌드 관련 설정을 포함한다. 예를 들어, 플러그인 설정, 소스 코드 및 리소스 디렉토리의 위치 등을 지정한다.이 파일은 Maven 설정을 담고 있다.
로컬 레포지토리의 위치, 원격 레포지토리 정보, 서버 인증 정보 등을 설정한다.
settings.xml
은 사용자의 홈 디렉토리의 .m2
디렉토리 (~/.m2
) 또는 Maven 설치 디렉토리의 conf
디렉토리 ($M2_HOME/conf
)에 위치할 수 있다.
참고: https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80#settingsxml
참고: https://hstory0208.tistory.com/entry/Gradle%EC%9D%B4%EB%9E%80-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EC%A7%80%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84-%EB%B3%B4%EC%9E%90