[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별로 여러 정보를 나타내며 설정 할 수 있다.

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>
  • 프로젝트 명
<description>
  • 프로젝트 설명
<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가 된다.
    • 예를 이렇게 해서 그렇지 자바 버전을 바꾸는 일은 잘 없다.
출처

댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?

[Python] # -*- coding: utf-8 -*-를 쓰는 이유