[Maven] pom.xml 분석
[Maven] pom.xml 분석
Maven
- Maven은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴이다.
- 즉, 자바 소스를 compile하고 package해서 deploy하는 일을 자동화 해주는 것
Maven이 참조하는 설정파일
Maven 전체를 보기보다 프로그래밍에 직접적인 연관이 있는 두 개의 설정파일을 보면 됨
1. settings.xml
- settings.xml은 maven tool 자체에 관련된 설정을 담당
- MAVEN_HOME/conf/ 아래에 있다.
- MAVEN_HOME은 환경변수에 설정한 경로
- Maven 자체에 설정 값을 바꾸는 일은 일단 잘 없으므로 넘어가고 기획한대로 pom.xml을 보자
2. pom.xml
- 하나의 자바 프로젝트에 빌드 툴로 maven을 설정했다면, 프로젝트 최상위 디렉토리 "pom.xml"이라는 파일이 생성되었을 것이다.
- pom.xml은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분
- 꼭 pom.xml이라는 이름을 가진 파일이 아니라 다른 파일로 지정할 수도 있다
- mvn -f ~~.xml test
- 그러나 maven의 원칙으로 다른 개발자들이 헷갈릴수 있으므로 그냥 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>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
</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>
</plugin>
</plugins>
</build>
</project>
Soring boot에서 프로젝트를 생성했을 때 나오는 pom.xml의 내용이다.
pom.xml은 <project> ... </project>로 둘러싸여서 section별로 여러 정보를 나타내며 설정 할 수 있다.
pom.xml은 <project> ... </project>로 둘러싸여서 section별로 여러 정보를 나타내며 설정 할 수 있다.
1. 프로젝트 정보
<modelVersion> : 4.0.0
- maven의 pom.xml의 모델 버전
- 형식이 4.0.0 버전이라고 이해하면 됨
<groupId>
- 프로젝트를 생성한 조직 또는 그룹명으로 보통, URL의 역순으로 지정
<artifactId>
- 프로젝트에서 생성되는 기본 아티팩트의 고유 이름
- 메이븐에 의해 생성되는 일반적인 artifact는 <artifact>-<version>.<extention>
- ex) demo-0.0.1-SNAPSHOT.jar
<version>
- 애플리케이션의 버전.
- 접미사로 SNAPSHOT이 붙으면 아직 개발단계라는 의미이며, 메이븐에서 라이브러리 관리하는 방식이 다름
<packaging>
- jar, war, ear, pom등 패키지 유형을 나타낸다.
<name>
- 프로젝트 명
- 프로젝트 설명
<url>
- 프로젝트를 찾을 수 있는 URL
위와 같은 태그들은 프로젝트 정보에 관련된 내용
--------------------------------------------------------------------------------------------------------------------------------------------
<properties>
- pom.xml에서 중복해서 사용되는 설정(상수) 값들을 지정해놓은 부분.
- 다른 위치에서 ${...}로 표기해서 사용할 수 있다.
- ex) java.version에 1.8을 적용하고 다른 위치에서 ${java.version}이라고 쓰면 "1.8"이라고 쓴 것과 같다
<profiles>
- dev, prod 이런식으로 개발할 때, 릴리즈할 때를 나눠야 할 필요가 있는 설정 값을 profiles로 설정할 수 있음
<profiles>
<profile>
<id>dev</id>
<properties>
<java.version>1.8</java.version>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<java.version>1.9</java.version>
</properties>
</profile>
</profiles>
- maven goal 부분에 -P 옵션으로 프로파일을 선택할 수 있다
- mvn compile -P prod 라고 하면 ${java.version}은 1.9가 된다.
- 예를 이렇게 해서 그렇지 자바 버전을 바꾸는 일은 잘 없다.
출처
댓글
댓글 쓰기