소통 하고싶은 개발자

Maven에 대해 알아보자 ② : Maven 설정파일 작성방법(pom.xml) - project, properties, dependencies 본문

Maven

Maven에 대해 알아보자 ② : Maven 설정파일 작성방법(pom.xml) - project, properties, dependencies

OhPro 2022. 5. 11. 20:06
반응형

다시 적당한 메이븐 짤

 


 

목차

  • 시작하며
  • pom.xml에서 설정하는 것들
    • project
    • properties
    • dependencies
  • 마치며

 


 

시작하며

이번 포스팅을 작성하는 목적은 나 스스로가 Maven 특유의 난잡한 설정파일을

간단하면서 깊게 다루기 위함이다.

 

참고로 이전 포스팅에서부터 이야기 했던 Maven 설정파일의 이름은 "pom.xml"이다.

이제부터 Maven설정 파일의 명칭을 "pom.xml"이라고 부르려고 한다.

 


 

pom.xml에서 설정하는 것들

pom.xml은 Project Object Model의 약자이고,

Maven Project를 설정하기 위한 설정 파일의 이름이다.

 

더보기
<?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>org.mytoypjt</groupId>
  <artifactId>behind</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>behind Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <tag.custom>custom-text</tag.custom>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>behind</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

 

pom.xml에서 설정하는 주요 항목에 대해 알아보자.

 

 

프로젝트 정보 설정 <project>

 

<project>

 

<project> : pom.xml의 루트(root) 태그로 모든 태그는 <project> 태그 안에 있다.

<project> 부가 설명 : 태그 내부에 xmlns는 xml namespace의 약자로, 보통 xml에서 namespace를 사용하는 이유는 xml parser가 해당 문서를 읽을 때 태그의 중복이 일어나는 것을 방지하기 위함이다. pom.xml도 결국 xml이고 사람이 만든 문서니까 maven compiler가 pom.xml을 읽을 때 태그의 중복이 생기지 않기 위하여 xmlns를 사용하는게 아닌가 싶다.
<modelVersion> : pom.xml의 버전이다.
<groupId> : 프로젝트의 그룹 id로, 제작자와 회사, 단체 등을 식별하기 위한 것이다.
<artifactId> : 프로젝트의 아티팩트 id로, 프로젝트에 할당한 고유 id라고 생각하면 된다.
<version> : 프로그램 버전으로, 기본 값으로 "1.0-SNAPSHOT"으로 기입되어있다.

참고 사항.
Maven에서 artifact란 Maven 리포지토리로 배포되는 jar file인데,
예를 들어 spring-boot-autoconfigure-1.1.5-RELEASE.jar과 같은 형식으로 작성된다.

또한, groupId(통상적으로 com.example.foo와 같이 도메인의 역순 형태)와 artifactId, version의
3가지 정보를 사용하여 artifact를 유일하게 구분한다.
<packaging> : 이 태그의 값을 사용하여 빌드가 진행되다가 package phase에서 패키징 할 때 타입을 지정한다. (예를 들어 jar, war 등)
<name> : 프로그램 이름으로 아티팩트 이름을 그대로 사용하는 경우가 많을 것이다.
<url> : 프로젝트와 관련된 웹 사이트의 url로, 나의 경우는 기본 값으로 "http://www.example.com"이 적혀 있었다.

 

 

프로퍼티 설정 <properties>

 

<properties>

 

<properties>
 : Maven 내부에서 반복적으로 사용될 상수 값인 프로퍼티(property)를 정의할 용도로 사용하며,
모든 프로퍼티는 해당 태그의 자식 태그이다.

pom.xml에서 프로퍼티 사용법
 : 형식에 맞춰 읽어오면 되는데, ${프로퍼티이름} 이런 식으로 적으면 해당 값을 <properties>에서 읽어온다.
<project.build.sourceEncoding>
 : 보통 프로퍼티에 [프로젝트 + . ]의 형식을 사용하면,
프로젝트 프로퍼티를 설정할 수 있도록 메이븐 컴파일러에 설정되어 있다고 한다.
<maven.compiler.source> : 현재 프로젝트를 컴파일할 때 Java Version을 설정할 수 있는 프로퍼티.
<maven.compiler.target> : 현재 프로젝트를 컴파일할 때 Java Version을 설정할 수 있는 프로퍼티.
<tag.custom> : 그냥 내가 만들어본 프로퍼티로 딱히 규칙성도 없는 그냥 그저 프로퍼티.

 

 

의존성 설정 (dependencies)

 

dependencies

<dependencies> : 프로젝트에서 사용할 라이브러리들에 대한 정보를 한 곳에 기입하도록 만들어진 태그로,
자식 태그에는 <dependency>가 있다. 자식 태그인 <dependency>를 필요한 만큼 기술하여 프로젝트를 구성할 수 있다.
<dependency> : 필요한 라이브러리 한 개에 대한 정보를 담는 용도의 태그이다. 부모 태그(dependencies) 내에서
여러 번 쓰일 수 있고, 한 개의 <dependency>안에는 두 개 이상의 라이브러리 정보가 담길 수 없다.
<groupId> : 해당 라이브러리의 그룹 id이다.
<artifactId> : 해당 라이브러리의 아티팩트의 id이다. 
<version> : 해당 라이브러리의 버전 정보가 담겨있다.
<scope> : 해당 라이브러리(디펜던시 = dependency)가 포함되는 범위를 태그로 나타낸 것이다.

참고 사항.
<scope>에는 compile, provide, runtime, test, system, import의 6가지 중 하나가 기입될 수 있으며,
자세한 scope에 대한 설명은 이 링크를 통해 확인할 수 있다.

 

 


 

마치며

이번에는 Maven 설정파일인 pom.xml이 무엇인지,

pom.xml에서 설정하는 것과 설정 방법에 대해서 대략적으로 요약해보았다.

 

자료를 찾다보니 내가 이번 포스팅에 요약하려고 했던 내용이 생각보다 많았다...

약간 우매함의 곡선을 지나고 있는 기분이...^^

 

아무튼 다음에 이어서 포스팅 하려고 한다.

(혹시 틀린 내용이 있거나, 모자란 부분이 있으면 지적해주시면 감사하겠습니다!!^^)

 

감사합니다!!

반응형