개발을 하면서 maven 의미도 모르고 그냥 이렇게 사용해! 라는 말에 진짜 그렇게 사용하고 있었다. 그러나 이번에 노트북을 바꾸면서 maven을 통한 에러를 발견하게 되었고, 이번 기회에 maven 이라는 것에 대해 정리해보려고 한다.
maven을 정리하기 전에 공부해야할 내용들이 있는데 아래와 같다.
Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다.
Maven은 Ant와 마찬가지로 프로젝트의 전체적인 라이프 사이클을 관리하는 도구 이며, 많은 편리함과 이점이 있어 널리 사용되고 있다.
(프로젝트의 작성부터 컴파일, 페트스 등 프로젝트 라이프사이클에 포함되는 각 테스트를 지원해준다.)
Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
Maven은 중앙 저장소를 통한 자동 의존성 관리를 중앙 저장소(아파치재단에서 운영 관리)는 라이브러리를 공유하는 파일 서버라고 볼 수 있고, 메이븐은 자기 회사만의 중앙 저장소를 구축할수도 있다.
간단한 설정을 통한 배포 관리가 가능 하다.
1) LifeCycle
1) settings.xml
** 메이븐을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드 하는위치(로컬저장소)의 기본 설정 'USER_HOME/.m2/repository' 인데 settings.xml의 에 원하는 로컬 저장소의 경로를 지정, 변경할 수 있다.
2) POM(프로젝트 객체 모델(Project Object Model))
◎ modelVersion : POM model의 버전
◎ parent : 프로젝트의 계층 정보
◎ groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.
◎ artifactId : 프로젝트 빌드시 파일 대표이름 이다. groupId 내에서 유일해야 한다. Maven을 이용하여 빌드시 다음과 같은 규칙으로 파일이 생성 된다.
artifactid-version.packaging. 위 예의 경우 빌드할 경우 bo-0.0.1-SNAPSHOT.war 파일이 생성된다. (하단 예시 파일 참고)
◎ version : 프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용.
◎ packaging : 패키징 유형(jar, war, ear 등)
◎ name : 프로젝트, 프로젝트 이름
◎ description : 프로젝트에 대한 간략한 설명
◎ url : 프로젝트에 대한 참고 Reference 사이트
◎ properties : 버전관리시 용이 하다. ex) 하당 자바 버전을 선언 하고 dependencies에서 다음과 같이 활용 가능 하다.
${java.version}
◎ dependencies : dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리 한다.
◎ build : 빌드에 사용할 플러그인 목록
Build:
Maven에서 "build"는 전체 프로젝트의 컴파일, 테스트, 패키징, 그리고 배포와 관련된 모든 단계를 포함한다.
즉, mvn clean install과 같은 명령어를 사용하면 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 최종 아티팩트를 생성하는 모든 과정을 수행한다.
이 과정에서 Maven은 필요한 의존성을 다운로드하고, 프로젝트의 구조를 검사하며, 최종 결과물인 JAR 파일이나 WAR 파일을 생성한다.
Package:
"package"는 Maven의 빌드 생명주기 중 하나로, 소스 코드를 컴파일한 후 아티팩트를 생성하는 단계이다.
mvn package 명령어를 실행하면, 소스 코드가 컴파일되고, 테스트가 실행된 후, 최종적으로 JAR 또는 WAR 파일이 생성된다.
이 단계는 빌드 과정의 일부로, 단독으로 실행될 수 있지만, 종종 전체 빌드 과정의 일부로 포함된다.