안드로이드 에서도, Spring에서도 gradle만 쓰던 나 갑자기 maven을 써야한다니 기본 구조를 알아보자!
-> 결국 gradle도 maven에서 파생되었다보니 전체적인 구조는 비슷했다!
java build tool (compile, package, deploy)
maven tool 자체에 관한 설정
(MAVEN_HOME/conf/아래에 있다. )
전자정부 프레임워크는 설정 파일들을 다 모아서 zip file로 제공, Settings.xml의 setting의 localrepository 뒤의 주소를 수정해야 한다.
POM(Project Object Model)
프로젝트 내 빌드 옵션을 설정하는 부분
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>egovframe</groupId>
<artifactId>lab103</artifactId>
<packaging>jar</packaging>
<version>3.10.0</version>
<name>lab103</name>
<url>http://www.egovframe.go.kr</url>
</project>
< project >< /project >의 section별로 여러 정보 나타내고 설정
< modelVersion > maven의 pom.xml의 모델 버전 (4.0.0)
< groupId > 프로젝트 조직 그룹명 ( 보통 URL의 역순 ex com.example)
< artifactId > 프로젝트에서 생성되는 기본 아티펙트의 고유이름(프로젝트 명)
< version >SNAPSHOT이 붙으면 아직 개발단계라는 뜻(메이븐에서 라이브러리 관리방식이 다르다고 함)
< packaging> 패키지 유형(jar,war,ear,pom)
(일반적으로 설정 파일명은 < artifac t>-< version >.< extention >이다. ex demo-0.0.1-SNAPSHOT.jar)
< name > 프로젝트 명
< description > 프로젝트 설명 (생략가능)
< url > 프로젝트를 찾을 수 있는 URL
< properties > pom.xml에서 중복해서 사용되는 상수값 지정하는 부분 다른 위치에서 ${…}로 표기해서 사용할 수 있음
<properties>
<java.version>1.8</java.version>
</properties>
${java.versoin} == 1.8
<dependencies>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.cmmn</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
groupId, artifactId, version정보는 필수적으로 필요
spring-boot-starter-*는 부모 pom.xml에 이미 버전정보가 있어서 따로 지정하지 않는다.
compile, runtime, provided, test 해당 라이브러리가 언제 필요한지 제외되는 지 설정
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
build tool : 빌드와 관련된 정보를 설정할 수 있는 곳
미리 정해진 빌드 순서
빌드 순서는 complie→test→package
Build LifeCycle의 각 단계
Phase는 단계별로 수행되어야 함(이전 phase가 수행되어야 다음 수행 가능)
최소한의 실행 단위(특정작업)
플러그인에서 실행할 수 있는 각각의 기능 (한개의 플러그인에서 여러 기능 실행가능)
⇒ 각 Phase에 연계된 goal을 실행하는 과정을 Build라고 함