빌드도구 Maven 의 기본적인 사용법

들어가며

  • 스프링부트를 사용할 때 대체로 메이븐, 그래들 둘 중 하나를 빌드도구로 선택한다. 그 중 메이븐에 대하여 간략하게 정리하였다.
  • 개발자 뉴렉님의 강의(https://www.youtube.com/watch?v=VAp0n9DmeEA)를 참고하였다.

간편한 라이브러리의 구성과 환경 설정(pom.xml)

<?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.4.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>11</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
  • 스프링 스타터(https://start.spring.io)를 사용할 때 위와 같이 pom.xml이 생성된다.
  • pom.xml 한 장으로 프로젝트에 필요로 모든 설정을 간편하게 한다. 스프링부트의 버전, 자바의 버전, 프로젝트의 명칭, 의존성, 빌드 및 플러그인 규칙을 설정한다.
  • 메이븐 리모트 리포지토리가 있기 전, 개발자들은 필요로 한 라이브러리 파일(jar)을 프로젝트에 내부 폴더에 삽입하였다. 메이븐 이후 <dependency></dependency> 에 라이브러리와 버전을 명시하고 인터넷 리포지토리에서 해당 라이브러리를 다운로드 받을 수 있게 되었다. 더 이상 파일을 관리할 필요가 없어졌다.
  • 메이븐은 동일한 빌드파일과 소스코드만 존재하면 언제 어디서 누가 사용하든 동일한 프로젝트를 생성할 수 있다.

빌드도구는 생명주기를 가지며 개발을 편리하게 만든다.

  • validate - validate the project is correct and all necessary information is available
  • compile - compile the source code of the project
  • test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • package - take the compiled code and package it in its distributable format, such as a JAR.
  • verify - run any checks on results of integration tests to ensure quality criteria are met
  • install - install the package into the local repository, for use as a dependency in other projects locally
  • deploy - done in the build environment, copies the final package to the remote repository for sharing with other developers and projects.

출처 : https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

  • 메이븐은 프로젝트의 생명주기를 관리한다. 위는 메이븐의 생명주기이다.
  • java 파일을 class로 변경하는 컴파일, 프로젝트의 테스트, 완성된 프로젝트를 배포하기 위하여 jar(자바), war(웹) 형태로의 패키지, 완성한 파일을 로컬 혹은 메이븐서버에 저장하는 인스톨과 디플로이라는 생명주기를 가진다.

기타

  • 다운로드 받은 의존성의 무결성을 검증하지 않는다. 만약 라이브러리와 관련한 문제가 있을 경우 의존성이 저장되는 .m2 폴더를 삭제한다.