티스토리 뷰

이것저것

Maven 사용하기

토마's 2020. 7. 22. 11:19

안녕하세요. 오늘은 Java 프로젝트를 진행하면서, 최근에는 maven을 사용하는 곳과 gradle를 사용하는 곳이 있는데 오늘은 자주 접했던 Maven에  대해, 간단한 소개 및 사용법 등에 대해서 포스팅하려고 합니다.

 

빌드(Build)란?

우선, 빌드 도구를 설명하기 전에 빌드라는 것은 "소스코드 파일을 실행가능한 산출물 또는 결과물로 만드는 과정"이라고 쉽게 이해하시면 됩니다. 조금 더 쉽게 예를 들어 설명을 드리면, Java 언어로 작성된 소스코드(.java) 및 기타 파일들을 .war 나 .jar 등의 형태로 묶어주는 과정이라고 생각하시면 됩니다.

 

메이븐(Maven) 이란?

Maven 은  Java용 프로젝트 관리 도구로, Jakarta Turbine 프로젝트의 빌드 프로세스를 단순화하려는 시도로 시작되었으며, 각각 고유 한 Ant 빌드 파일이있는 여러 프로젝트가 모두 약간 다릅니다. Maven은 Ant와 마찬가지로 프로젝트의 라이프사이클을 관리하는 도구이며, 편리하여 널리 사용되고 있습니다. 최근의 추세로는 Gradle이 사용되고 있습니다.

Maven은 pom.xml이라는 파일에 사용할 라이브러리들을 디펜던시(dependency)로 등록하면 다운로드 받아서 해당 프로젝트에 사용이 가능하도록 해주며, 간단한 설정을 통해서 배포 관리가 가능하도록 합니다.

 

메이븐의 장점

  1. 라이브러리의 관리를 매우 용이하게 해준다.
  2. 프로젝트의 작성부터 컴파일 등 프로젝트 라이프 사이클에 포함되는 각 테스트를 지원해준다.
  3. war 파일 기반의 배포용으로도 자주 사용된다.

Maven 설정 파일 구조

pom.xml

pom.xml 파일의 구조는 기본적으로 아래의 형태로 구성되어 있습니다. (dependencies 에는 사용할 라이브러리 목록이 나열)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.osc</groupId>
	<artifactId>test-simulation</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>test-simulation</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		// 사용할 dependency를 나열한다.
        // 각종 dependency는 https://mvnrepository.com/ 통해 검색이 가능하다.

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

xml 태그의 내용을 간략하게 확인하면 아래와 같습니다.

  • modelVersion : POM 모델의 version 정보
  • parent : 프로젝트의 계층 정보
  • groupId : 프로젝트를 생성하는 조직의 고유한 ID를 의미합니다. 일반적으로 도메인 이름을 거꾸로 적습니다.
  • artifactId : 프로젝트 빌드 시, 파일의 대표 이름입니다. groupId 내에서 유일해야하며, Maven으로 빌드시 다음과 같이 규칙적인 파일이 생성이 됩니다. -> {artifactId}-{version}-{packaging} 의 형태를 띄며, jar로 빌드할 시 test-simulation.0.0.1-SNAPSHOT.jar의 형태를 갖춥니다.
  • version : 프로젝트의 현재 version, 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용합니다.
  • packaging : 패키지의 유형을 나타냅니다. ( jar, war, ear 등 )
  • name : 프로젝트 또는 프로젝트 이름
  • description : 프로젝트 설명
  • properties : 버전 관리시 용이하게 사용이 되며, 동적인 환경 구성이 가능합니다. 예제는 아래와 같이 사용할 수 있습니다
<properties>
  <env>local</env>
  <clover.home>analysis_tools/clover</clover.home>
  <checkstyle.home>analysis_tools/checkstyle</checkstyle.home>
  <pmd.home>analysis_tools/pmd</pmd.home>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      
</properties>
  • dependencies : 프로젝트 의존 관계에 있는 라이브러리들을 나열하여 관리합니다.
  • build : 빌드에 사용할 plug-in의 목록을 나타냅니다.

Maven 명령어 사용

메이븐 명령어 사용을 위해서 IDE 툴을 사용해 간단하게 이용하는 방법도 있고, 클릭을 통해서 명령어 실행이 가능합니다.

 

메이븐(Maven)에는 미리 정해진 빌드 순서를 가지고 있는데, 이를 라이프 사이클(Life-Cycle)이라고 하며, 라이프 사이클의 각 빌드(Build) 단계를 페이즈(Phase)라고 합니다. 라이프 사이클은 여러 단계(페이즈)로 나뉘어져 있으며, 각 페이즈들은 의존 관계를 갖습니다.

출처 : https://www.slideshare.net/ssuser5445b7/ss-56566336?qid=927855f5-7c8a-4f88-a834-d31292324fd2&v=&b=&from_search=4

 

그 외, 메이블(Mavern)을 명령어를 터미널에서 Command Line Interface(CLI)를 통해 사용하기 위한 기본적인 구조는 아래와 같습니다.

mvn [options] [<goal(s)>] [<phase(s)>]
기본 라이프 사이클
mvn compile : 소스코드를 컴파일 한다.
mvn test : 단위 테스트를 실행한다. (기본 설정은 단위 테스트가 실패하면 빌드 실패로 간주한다.)
mvn package : 컴파일된 클래스 파일과 리소르 파일들을 war 또느 jar와 같은 파일로 패키징한다.
mvn install : 패키징한 파일을 로컬 저장소에 배포한다. (USER_HOME/.m2/)
mvn deploy : 패키징한 파일을 원격 저장소에 배포한다.

clean 라이프 사이클
mvn clean : 메이븐 빌드를 통해서 생성된 모든 파일들을 삭제한다.

site 라이프 사이클
mvn site : 메이븐 설정 파일 정보를 활용하여 프로젝트에 대한 문서 사이트를 생성한다.
mvn site-deploy : 생성한 문서 사이트를 설정되어 있는 서버에 배포

※ 여기서 패키징 된 war 또는 jar 파일들은 target 디렉토리 밑에 위치하게 됩니다.

 

간단하게 테스트를 위해서 mvn clean install 을 진행해도보록 하겠습니다. 아래와 같은 로그를 보여주면서 빌드가 성공 했을 경우 BUILD SUCCESS 가 나오는 것을 확인 할 수 있습니다.

이것으로 Maven에 대한 간략하게 소개 및 사용법의 포스팅을 마치도록 하겠습니다.

 

참고 : http://maven.apache.org/index.html