-
아파치 메이븐(Apache Maven)이란? / 메이븐 프로젝트 생성하기JAVA 2022. 6. 20. 13:43
아파치 메이븐(Apache Maven) 이란?
자바용 프로젝트 관리 도구이다. 프로젝트 개체 모델(POM) 개념을 기반으로 하는 Maven은 중앙 정보 조각에서 프로젝트의 빌드, 보고 및 문서를 관리할 수 있다. 현업에서는, 빌드하기 위해 사용하기 때문에 보통 Build도구라고 얘기한다.
빌드(Build)란?
SW Project가
(1) 컴파일 / 테스트
(2) jar / war / ear 파일 등으로 패키징 =>WAS에 배포가능한 형식
(3) 실행환경에 배포
(4) 정리(컴파일된 모든 자원 정리)빌드도구는 크게
(1) Apache Maven
(2) Apache Gradle(groove 언어 기반)
이 있는데, 요즘에는 gradle을 많이 쓰는 추세지만, maven도 아직 쓰인다.
둘의 문법이 다르지만, 결국 구조는 동일하기 때문에 하나를 익혀두면 다른 하나는 비교적 쉽게 적응할 수 있다.
아파치 메이븐 다운로드
https://maven.apache.org/download.cgi
메이븐 역시 자바기반이기 때문에 운영체제에 제약이 없다.
홈페이지에서 다운로드 받지 않고 scoop에서도 메이븐을 설치할 수 있다.
> scoop install maven
설치 후 info로 정보를 확인하면 installed에 버전명으로 된 폴더가 설치된 것을 확인할 수 있다.
버전 업데이트를 할 경우, installed에 버전명의 폴더가 계속 추가되는데, 이를 현재버전만 남기려면 cleanup을 사용하면 된다.
> scoop cleanup maven
scoop으로 설치한 앱들은 자동으로 PATH 환경변수를 등록해주기 때문에, 별도로 설정할 필요없이 바로 mvn명령어를 사용할 수 있다. 버전 확인 명령어는 다음과 같다.
> mvn -version (축약형: -v)
Apache Maven 2까지는 시스템환경변수로 M2_HOME을 사용했다.
MAVEN_HOME = <maven 설치폴더>
3버전부터는 M2_HOME 환경변수를 필요로 하지 않는다. 그냥 PATH환경변수만 있으면 된다.
mvn의 기본 인코딩은 ms949로 되어있는데, 만약 한글이 깨진다면 쉘에서 바꿔주면 된다.
> chcp 65001
메이븐 프로젝트 생성하기
원하는 경로에 프로젝트 폴더를 생성한 후, 경로를 이동한다.
> cd C:\temp1\maven_workspace
경로 이동 후 명령어를 입력하면 메이븐 구성에 필요한 템플릿을 다운받는다.
> mvn archetype:generate
다운이 끝나면 맨 마지막 행에 기본 제시되는 템플릿으로 1917번이 나오는데, 이를 위로 올려서 확인하면
1917번은 quickstart라고 나온다.
이를 기본으로 쓰려면 엔터를 누르면 된다.
템플릿 이름은 groupid : artifactid 형식으로 나온다.
(1) groupid
- 현재 이 프로젝트를 수행하는 조직/회사를 의미
- 값으로는, 해당 조직/회사의 고유한 도메인명을 거꾸로 만든 이름
ex. naver.com --> com.naver / kakao.com --> com.kakao
zerock.org --> org.zerock --> 우리가 사용할 groupid
(2) artifactid
- 프로젝트 이름(프로젝트 폴더의 이름을 결정)
- 의미 : 이 프로젝트로 만들어지는 산출물!!엔터를 누르면 버전을 선택하는 창이 나온다.
alpha가 들어있는 버전은 stable 버전이 아니므로, 정식 버전 중에 선택해야 한다.
기본으로 제시되는 버전은 가장 최신버전이다.
엔터를 누르면 설치가 진행되며, 끝나면 groupid와 artifactid를 지정하라는 메시지가 나온다.
아까 지정하기로 한 org.zerock을 입력한다.
입력한 후엔 버전을 설정해야한다.
위에서 설정한 버전은 템플릿의 버전을 설정하는 것이고, 여기서 지정할 버전은 artifact의 버전이다. 따로 입력할 필요없이 엔터를 누르면 된다.
다음으로는 top level 패키지명을 설정해야한다.
아까 설정한 groupid.<애플리케이션이름> 형식으로 설정한다.
모든 설정을 완료하면 설정이 맞는지 한번 더 물어보고, 엔터를 누르면 설정한대로 메이븐 프로젝트가 생성된다.
생성된 프로젝트폴더의 구조를 보기위해 tree명령어를 사용한다. /f옵션을 붙이면 파일의 구조까지 보여준다.
pom.xml 파일이 가장 중요하다.
pom이란 Project Object Model이다. 소프트웨어를 하나의 객체로 보고, 프로젝트 내 빌드옵션을 설정하는 파일이다.
만약 서드라이브러리가 필요할 경우, pom.xml파일 안에 설정해주면 자동으로 원격(중앙)저장소에서 해당 라이브러리를 다운받아와서 지역저장소에 저장한다.
일일히 다운로드받고 클래스패스를 설정할 필요 없다. 버전관리도 자동으로 해준다.
설치한 라이브러리들은 C:\Users\bit\.m2\repository(지역저장소)에 저장된다.
메이븐으로 프로젝트를 생성하면 src폴더 내 main과 test폴더가 생성되는데, test폴더는 TDD(테스트 주도 개발)하기 위한 폴더로, 테스트코드를 작성하는 곳이다.
메이븐 프로젝트 컴파일
pom.xml파일이 있는 폴더경로로 이동 후, mvn compile을 입력하면 main폴더의 .java파일을 컴파일 해서 /target에 저장한다. 컴파일시 -X 옵션을 지정하면 상세로그를 확인할 수 있다.
> mvn compile > mvn -X compile
컴파일 후 생성된 target폴더의 구조를 확인하면 다음과 같다.
classes폴더는 main폴더 안의 패키지 구조대로 컴파일을 저장한다.(test폴더는 제외)
generated-sourced폴더는
메이븐 프로젝트 테스트
컴파일 후엔 반드시 테스트를 통해 버그가 없는지 확인해야한다.
> mvn test
테스트 후 target폴더에 테스트관련 폴더가 추가된 것을 확인할 수 있다.
프로젝트 패키징
테스트도 무사히 끝냈다면, 프로젝트를 .jar파일로 패키징하는 작업이 필요하다.
> mvn package
패키징하는 과정에서 1. 컴파일 2. 테스트를 다시한번 자동으로 수행한다.
이 .jar, 혹은 .ear 파일을 WAS에 배포하면
clean
> mvn clean
target폴더를 모두 삭제한다.
pom.xml 설정
pom.xml 파일을 간단하게 보면 다음과 같다.
groupId, artifaceId, version태그에 프로젝트 생성시 입력한 정보가 들어간다.
dependencies(의존성) 태그 > dependency태그 안에 groupId, artifactId, version을 지정한다.
build태그 > pluginManagement > plugins > plugin태그 안에 artifactId와 version을 지정한다. plugin태그에서는 groupId를 생략해도 자동으로 넣어준다.
build태그의 plugin 중 compiler 설정이 중요하다.
configuration태그 안에 어떤 자바버전을 사용할 것인지 지정한다.
인코딩도 지정해줄 수 있다.
지금은 따로 configuration태그를 작성할 필요 없이, properties속성 값을 원하는대로 변경해주면 된다
자바 9버전까지는 1.x로 표시, 이후부터는 11, 12 등 숫자로 지정하면 된다.
Maven Repository (중앙 저장소)에서 라이브러리 다운받기
maven repository https://mvnrepository.com/ 에서 라이브러리를 검색할 수 있다.
검색은 groupId나 artifactId로 검색이 가능하다.
라이브러리를 하나 검색해서 들어가면 버전 별로 다운받을 수 있다.
뒤에 알파벳이나 색깔이 칠해진 버전이 아닌 숫자로만 되어있는 버전을 설치하는 것이 좋다.
버전을 클릭하면 프로젝트 관리 도구별로 복사할 수 있는 코드가 제공된다.
해당 창을 클릭하면 자동으로 복사된다.
이 코드를 pom.xml 파일 내 dependencies태그 안에 추가하면 라이브러리를 사용할 수 있다.
'JAVA' 카테고리의 다른 글
Eclipse JEE 버전 환경설정 (0) 2022.06.21 Eclipse JEE 버전 설치하기 (0) 2022.06.20 JAVA Collections 클래스의 유용한 메소드들 (0) 2022.04.15 멀티 스레드의 개념(왜 멀티 스레드를 사용해야할까?) (0) 2022.04.09 TCP 네트워킹과 log4j2 사용방법(로그를 찍어보자!) (0) 2022.04.06