본문 바로가기

BackEnd/Spring

Maven

Java 의존관리도구인 Maven을 하나하나 살펴보자.

 

< pom.xml >

최초에 Maven프로젝트를 생성시에 pom.xml이 생성된다.

이때 groupId와 artifactId 태그의 경우에는 컴파일을 한 파일들이 관리되는 디렉토리명으로 지정된다.

packaging태그에서는 빌드 후 배포시에 어떤 형식으로 지정되는지에 대해서 나타나는데

일반적으로 war(WebApplication Archive) 형식으로 취한다.

 

의존관리 도구 이외에도 maven은 다른 역할을 하는데,

pom.xml은 Effective POM을 상속받기 때문에 Effective POM을 통해서 다양한 명령어를 사용할 수 있게 된다.

< Effective POM >

 코드를 보면 repository 태그에 저장소 URL이나,

sourceDirectroy 의 현재 프로젝트의 위치등을 확인할 수 있다.

 

maven 명령어 중에 유용한 명령어 중에는 compile 등이 있는데,

리눅스 서버와 같이 IDE 툴을 사용하여 컴파일 및 실행이 힘든 경우에 maven 명령어를 이용하여서 컴파일 할 수 있다.

C:\Users\users\sample>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building sample 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\madvirus\sample\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ sample ---
[INFO] Compiling 1 source file to C:\Users\madvirus\sample\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.205 s
[INFO] Finished at: 2019-07-01T09:51:15+09:00
[INFO] Final Memory: 11M/110M
[INFO] ------------------------------------------------------------------------

< console 결과 >

class 파일은 target/classes 폴더에 생성된다.

 

이는 이클립스를 이용해서 역시 가능하다.

 

< Maven build >
< Goals 이 명령어 >

동일한 결과를 얻을 수 있다.

 

이외에 pakeage 라는 Goals 을 이용하면 프로젝트를 import하는 것도 가능 하다.

war 파일 생성

이렇게 빌드를 하기 위해선 다음의 라이프 사이클을 의존한다.

< 해당 명령어를 실행하기 위해선 상위 명령어들을 모두 실행해야 한다. >

이외에 Effective POM의 플러그인이나 기타 설정들을 오버라이딩 하는 것 역시 가능하다.

< effective.pom >

 

< pom.xml >

빌드의 디렉토리와 compiler의 버전을 바꾸어보았다.

 

이렇게 설정을 변경했을 때는

기존의 eclipse 설정을 clean 시키고 새로 업데이트 해주어야 한다.

< 해당 GOals 을 실행시켜 해결하자 >