프로젝트를 진행하다 보면 외부 라이브러리를 가져다 쓸 일이 있다. Pure Java 프로젝트에서 모듈을 하나 만들었는데, 이 모듈이 의도한 대로 작동하는지 테스트하기 위해 JUnit 라이브러리를 가져와야 한다고 하자. 이 때 프로젝트에 라이브러리를 어떻게 추가할까? 혼자 작업하는 프로젝트라면, 구글링을 통해 라이브러리 파일을 찾아서 프로젝트에 직접 넣는 방법이 제일 편할 것이다.
위 사진처럼 mvnrepository에 직접 들어가 라이브러리의 jar 파일을 다운로드해 프로젝트에 직접 추가할 수 있다.
아니면 위 사진과 같이, jar 파일을 직접 다운로드받지 않고 Maven Repository에 존재하는 라이브러리를 검색해서 추가하는 방법도 있다.
이렇게, Maven을 사용하지 않아도 라이브러리를 별 문제 없이 프로젝트에 넣을 수 있다. 그렇다면 굳이 Maven을 사용하는 이유는 무엇일까?
공식 사이트를 보면, Maven은 소프트웨어 프로젝트 관리 및 생성 도구라고 정의하고 있다. 즉, Maven은 라이브러리를 관리하고 프로젝트를 빌드하는 도구이다. 그런데 왜 굳이 Maven을 사용해서 라이브러리를 관리해야 할까?
프로젝트의 규모가 작을 때에는 위 방법으로 프로젝트에 라이브러리를 가져와도 문제가 없을 것이다. 하지만 프로젝트의 규모가 점점 커지고, 사용하는 라이브러리의 수가 늘어나면 프로젝트에서 사용하는 라이브러리를 관리할 필요가 생긴다. 다른 사람에게 작업하던 프로젝트를 넘겨주고, 추가된 라이브러리를 일일이 설치하는 것은 쓸데 없는 일이다. 그것을 대신 해 주는 것이 Maven이 하는 일이다.
Maven 프로젝트에서는 pom.xml에 POM(Project Object Model)을 정의해서 사용한다. 사용하는 라이브러리의 목록을 pom.xml에 적어 두기만 하면 라이브러리의 변경을 쉽게 관리할 수 있다.
프로젝트를 생성하는 화면에서 Maven을 선택한다.
(당연한 이야기지만 Gradle을 선택하면 Gradle 프로젝트가 된다.)
Maven 프로젝트가 생성되고, pom.xml을 편집하는 탭이 열린다.
우측의 Maven 탭에서 Maven 플러그인의 기능을 실행할 수 있다. 플러그인 말고도 Lifecycle
그룹이 보이는데, 각 항목은 Goal이라고 부른다. 각각의 Goal이 무엇을 수행하는지 그룹 별로 간단하게 정리해 보면 다음과 같다. 아래 내용은 공식 사이트를 참고하며 작성하였다.
각 Goal은 command line에 mvn {keyword}
의 형식으로 명령어를 입력해 사용할 수 있다.
(e.g. mvn package
, mvn clean
, mvn install
등)
Gradle은 Java가 아닌 Groovy를 기반으로 만든 빌드 자동화 도구이다. Maven과 기능이 유사해서 비교하기 좋은데, 재미있게도 공식 사이트에서 직접 Maven과의 차이점을 비교하고 있다. 내용을 요약해서 가져와 보자면 다음과 같다.
Maven은 확실히 너무 장황하다. 장황하기 때문에 실수가 잦아지고, 실수가 잦아져서 에러가 많이 난다. Gradle은 이것을 해결하려고 개발된, Maven의 장점만 뽑아와서 만든 빌드 도구이다. 또, Maven은 모듈을 상속하는 식으로 의존성을 관리하고, Gradle은 설정을 주입받아서 의존성을 관리한다고 한다. 따라서 다양한 모듈을 가져와서 사용하는 프로젝트의 경우는 특히나 Maven보다 Gradle을 사용하는 편이 더 나을 것이다.
다음 글에서는 Gradle에 대해서 알아보겠다.