본문 바로가기

Spring 3.0 - 4.3

메이븐 기초 (1) Maven이란 / Maven 설치법 / jar파일 생성하기

Maven이란?

 

프로젝트 빌드와 라이프 사이클, 사이트 생성 등 프로젝트 전반을 위한 관리 도구로서 많은 자바 프로젝트가 메이븐을 사용해서 프로젝트를 관리하고 있다.

 

 

그럼, Maven을 왜 사용할까?

Spring Framework에는 다양한 모듈이 존재한다. 핵심 모듈로는 spring-core, spring-beans, spring-context, spring-aop를 비롯한 spring-webmvc, spring-jdbc, spring-tx 등이 있다.

각 모듈은 스프링 프레임워크에 포함되어 있지 않은 다른 모듈을 필요로 한다.

예를 들어 spring-aop 모듈은 aopalliance 모듈을 필요로 하고, spring-orm 모듈은 JAP나 하이버네이트 모듈을 필요로 한다.

 

각 모듈은 모두 메이븐 중앙 리포지토리를 통해서 배포되고 있다. 자바 프로젝트를 구성할 때 주로 사용하는 빌드 도구인 Maven과 Gradle은 둘 다 메이븐 리포지토리를 지원한다.

 

Maven과 Gradle 모두 동일한 폴더 구조를 사용한다.

 

 

(1) Maven 설치

Windows 기준으로 설명한다. 다른 OS의 설치 방법은 https://maven.apache.org/install.html 문서를 참고하면 된다. 

 

 

다음 페이지에 접속하여 다운로드 버튼을 눌러준다.

http://maven.apache.org/download.cgi

 

Maven – Download Apache Maven

Downloading Apache Maven 3.6.3 Apache Maven 3.6.3 is the latest release and recommended version for all users. The currently selected download mirror is http://mirror.navercorp.com/apache/. If you encounter a problem with this mirror, please select another

maven.apache.org

 

 

 

 

 

명령 프롬프트에서 메이븐을 실행할 수 있도록 PATH 환경변수를 설정한다.

(bin 폴더에 mvn.bat 파일이 존재하므로, Path 경로에 [메이븐설치폴더]\bin 을 추가하면 됩니다)

 

 

 

확인 후 명령프롬프트 창을 켜서 mvn -version을 입력하면 메이븐 버전 정보가 나온다.

 

 

 

 

(2) 메이븐 아키타입을 이용한 프로젝트 생성하기

보통 Spring Project를 만들 때 메이븐 프로젝트 폴더와 pom.xml 파일을 처음부터 직접 생성하는 경우가 많다.

이렇게 직접 생성해도 되지만 메이븐이 제공하는 아키타입을 사용하면 더 편하게 생성 가능하다!

 

아키타입을 이용해서 메이븐 프로젝트를 생성해보자

 

 

cmd 창을 키고 mvn archetype:generate 를 입력하면 프로젝트 생성이 시작된다.

이 명령어를 처음 실행할 때 시간이 좀 걸리는데 그 이유는 메이븐이 필요한 플러그인과 모듈을 다운로드 받기 때문이다. 메이븐 배포판은 최초로 메이븐을 사용하는 데 필요한 모듈만 포함한다. 그 외에 archetype 플러그인, compile 플러그인 등 메이븐을 사용하는 데 필요한 모듈은 포함하고 있지 않다. 이들 모듈은 메이븐 중앙 리포지토리에서 다운로드 받아 이용한다.

 

 

메이븐 프로젝트를 생성하는 데 필요한 정보를 입력하라는 메시지가 단계적으로 뜨는데, 필자는 다음과 같이 설정했다.

 

 

  • groupId : 프로젝트가 속하는 그룹 이름 (com.exe)
  • artifactId : 프로젝트 이름 (sample) 
  • version : 결과물의 버전. 위에서는 기본 값인 1.0-SNAPSHOT을 사용했다
  • package : 별도로 입력하지 않을 경우 groupId와 동일한 구조의 패키지를 생성 (com.exe)

 

성공적으로 생성되면 artifactId에 입력한 값과 동일한 이름의 폴더가 생성된다.

 

pom.xml 을 비교해보면 다음과 같다.

우리가 만든 메이븐 아키타입을 이용해서 만드는 경우,  packaging이 jar로 되어 있고 

STS 툴 (혹은 eclipse) 에서 만든 프로젝트의 경우 packaging이 war로 되어 있다.

 

 

 

 

위에서 메이븐 아키타입을 이용해 프로젝트를 생성할 때, compile 플러그인 모듈을 자동으로 다운받아주진 않는다 했다. 고로 pom.xml 파일을 열어서 자바 버전을 11로 설정하는 코드를 추가하자.

...
   <build>
        <plugins>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
	        <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
       </plugins>
   </build>
...   

 

 

 

(4) 컴파일 해보기 / 테스트 실행 해보기 / 패키지 해보기

 

  • 컴파일 해보자.
>mvn compile  

참고로 메이븐 명령어를 사용하면 필요한 파일을 인터넷에서 다운로드하기 때문에, 인터넷이 연결되어 있지 않은 환경에서 실행하면 올바르게 동작하지 않는다.

 

 

컴파일 된 결과는 target/classes 폴더에 생성된다.

 

 

 

 

  • 테스트 클래스를 실행해보자.

 

mvn test 명령어를 실행하면 테스트 코드를 컴파일하고 실행한 뒤 테스트 성공 여부를 출력한다.

컴파일 된 테스트 클래스들은 target/test-classes 폴더에 생성되고 테스트 결과 리포트는 target/surefire-reports 폴더에 저장된다.

 

 

 

 

  • 패키징 해보자

모든 코드 컴파일에 성공하고 테스트도 통과했으니 이제 배포 가능한 jar 파일을 만들어보자. 다음 명령어를 실행하면 프로젝트를 패키징해서 결과물을 생성한다.

 

mvn package가 성공적으로 실행되면 target 폴더에 프로젝트 이름(sample)과 버전(1.0-SNAPSHOT)에 따라 알맞은 이름을 갖는 jar 파일이 생성된다.