메이븐 (Maven)
1. Maven ?
- 메이븐은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴이다.
- 자바 소스를 compile하고 package해서 deploy하는 일을 자동화
2. Maven 참조 설정파일
2-1. settings.xml
- settings.xml은 mavent tool 자체에 관련된 설정
- 위치는 MAVEN_HOME/conf/settings.xml
- 전체적인 구조 ↓
<settings> // 최상위 엘리먼트
<pluginGroups>
...
<!-- 플러그인의 groupId가 명시적으로 설정되어 있지 않을 때 플러그인을 지정하는 곳 -->
</pluginGroups>
<mirrors>
...
<!-- 저장소에 대한 다운로드 미러(?) -->
</mirrors>
<profiles>
...
<!-- JDK 버전별, OS 별 빌드 구성 다르게 할수 있는 설정 -->
</profiles>
<activeProfiles>
...
<!-- .. -->
</activeProfiles>
<servers>
...
<!-- .. -->
</servers>
</settings>
2-2. pom.xml
- 자바 프로젝트의 빌드 툴을 maven으로 설정해서 만들었다면 생성되는 파일.
- POM(Project Object Model)을 설정하는 부분, 프로젝트 내 빌드 옵션을 설정하는 부분
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- What? maven pom.xml의 모델 버전. (MAVEN의 형식이 4.0.0 이다.) -->
<parent> <!-- What? 스프링 부트에서 자주 사용하는 라이브러리의 버전정보, dependency들을 상속받는당 (부트의 pom.xml) -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ghsong</groupId> <!-- What? 프로젝트를 생성한 조직, 그룹명 (보통 URL의 역순으로 작성) -->
<artifactId>spring-mvc</artifactId> <!-- What? 프로젝트에서 생성되는 기본 아티펙트의 고유 이름 (프로젝트를 나타내는 유일한 이름) -->
<version>0.0.1-SNAPSHOT</version> <!-- What? 애플리케이션의 버전 (접미사로 SNAPSHOT이 붙으면 개발단계라는 의미) -->
<name>spring-mvc</name> <!-- What? 프로젝트 명 -->
<description>Spring Boot Study</description> <!-- What? 프로젝트 설명 -->
<url>..</url> <!-- What? 해당 프로젝트를 찾을 수 있는 URL -->
<properties> <!-- What? pom.xml에서 중복으로 사용되는 설정값들을 지정해놓는 부분 (다른 위치에서 사용 시 ${..}로 사용)-->
<java.version>11</java.version>
</properties>
<dependencies> <!-- What? 의존성 라이브러리 -->
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <!-- What? complie, runtime, provided, test... 해당 라이브러리가 언제 필요한지 -->
</dependency>
</dependencies>
<build> <!-- What? MAVEN의 핵심인 빌드와 관련된 정보 설정 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3. MAVEN 라이프사이클
- maven의 라이프사이클은 크게 default, clean, site .
- 메이븐의 모든 기능은 플러그인을 기반으로 동작
- 플러그인에서 실행할 수 있는 각각의 작업을 골(goal)이라하고 하나의 페이즈는 하나의 골과 연결되며, 하나의 플러그인에는 여러개의 골이 있을 수 있다.
라이프 사이클
- mvn process-resources : resource 디렉토리의 있는 파일을 target/classes로 복사
- mvn compile : src/java 밑의 모든 자바 소스를 컴파일해서 target/classes로 복사
- mvn test-compile : test/java의 내용을 target/test-classes로 복사
- mvn test : surefire:test의 실행. target/test-classes에 있는 테스트케이스의 단위테스트 진행 (결과를 target/surefire-reports에 저장)
- mvn package : target 디텍토리 하위에 jar, war, ear등 패키지파일을 생성하고 이름은
<build>
의<finalNmae>
의 값을 사용 (없을 경우 artifactId-version.extention 으로 생성)
- mvn install : 로컬 저장소로 배포
- mvn deploy : 원격 저장소로 배포
- mvn clean : 빌드 과정에서 생긴 target 디렉토리 내용 삭제
- mvn site : target/site에 문서 사이트 생성
- mvn site-deploy : 문서 사이트를 서버로 배포
Build
<finalName>
: 빌드 결과물(war, jar, ear)의 이름 설정
<resource>
: 리소스(각종 설정 파일)의 위치 설정
<resource>
없으면 기본으로 "src/main/resources"
<testResources>
: 테스트 리소스의 위치
<testResource>
: 없으면 기본으로 "src/test/resources"
<Repositories>
: 빌드할 때 접근할 저장소의 위치. 기본으로 메이븐 중앙 저장소인 http://repo1.maven.org/maven2 로 지정
<outputDirectory>
: 컴파일한 결과물 위치. 기본으로 "target/classes"
<testOutputDirectory>
: 테스트 소스를 컴파일한 결과물 위치. 기본으로 "target/test-classes"
<plugin>
: 어떠한 액션 하나를 담당하는 것으로 가장 중요하지만 들어가는 옵션.
댓글