English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Maven POM

POM(프로젝트 객체 모델, Project Object Model)은 Maven 프로젝트의 기본 작업 단위로, XML 파일로 구성되어 있으며 프로젝트의 기본 정보를 포함하고 있으며, 프로젝트가 어떻게 빌드되는지, 프로젝트 의존성을 선언하는 등을 설명합니다.

타스크나 목표를 실행할 때 Maven은 현재 디렉토리에서 POM을 찾습니다. Maven은 POM을 읽고 필요한 설정 정보를 가져와서 목표를 실행합니다.

POM에서 다음 설정을 지정할 수 있습니다:

  • 프로젝트 의존성

  • 플러그인

  • 실행 목표

  • 프로젝트 빌드 프로파일

  • 프로젝트 버전

  • 프로젝트 개발자 목록

  • 관련 이메일 목록 정보

POM을 생성하기 전에 먼저 프로젝트 그룹 (groupId), 프로젝트의 유일한 ID를 설명해야 합니다.

<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>
    <!-- 회사나 조직의 유일한 기호이며, 설정할 때 생성된 경로도 이를 기반으로 생성됩니다. 예를 들어, com.companyname.project-group, Maven은 이 프로젝트를 jar 패키지로 만들어 로컬 경로에 저장합니다:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 프로젝트의 유일한 ID입니다. 하나의 groupId 아래 여러 개의 프로젝트가 있을 수 있으며, artifactId를 통해 구분됩니다 -->
    <artifactId>project</artifactId>
 
    <!-- 버전 번호 -->
    내부에, 버전 번호 범위로 설정할 수도 있습니다.1.0</dependency>/<version>
</project>

모든 POM 파일은 project 요소와 필수 필드: groupId, artifactId, version을 가지고 있어야 합니다.

노드설명
project프로젝트의 뿌리 태그
modelVersion모델 버전은 설정되어야 합니다 4.0。
groupId이는 프로젝트 그룹의 식별자입니다. 조직이나 프로젝트에서 일반적으로 유일합니다. 예를 들어, 은행 조직 com.companyname.project-group은 모든 은행 관련 프로젝트를 소유합니다.
artifactId이는 프로젝트의 식별자입니다. 일반적으로 프로젝트 이름입니다. 예를 들어, 소비자 은행. groupId와 artifactId는 함께 artifact가 저장소에서의 위치를 정의합니다.
version

이는 프로젝트의 버전 번호입니다. artifact 저장소에서는 다른 버전을 구분하는 데 사용됩니다. 예를 들어:

com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1

부모(Super)POM

부모(Super)POM은 Maven 기본 POM입니다. 모든 POM은 부모 POM을 상속받습니다(부모 POM이 명시적으로 정의되었는지 여부에 관계없이). 부모 POM은 상속할 수 있는 기본 설정을 포함하고 있습니다. 따라서 Maven이 POM에서 필요한 의존성을 다운로드해야 할 때, 그는 Super POM에서 설정된 기본 저장소 http:에 접근합니다//repo1.maven.org/maven2 다운로드하세요。

Maven은 effective pom(Super pom과 프로젝트 자체의 설정을 더한 것)을 사용하여 관련 목표를 실행합니다. 이는 개발자가 pom.xml에서 가능한 한 적은 설정을 하도록 도와줍니다. 물론 이 설정은 다시 작성될 수 있습니다.

다음 명령어를 사용하여 Super POM 기본 설정을 확인할 수 있습니다:

mvn help:effective-pom

다음은 MVN 디렉토리를 생성합니다/프로젝트, 이 디렉토리에서 pom.xml을 생성하면 다음과 같은 내용이 됩니다:

<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>
    <!-- 회사나 조직의 유일한 기호이며, 설정할 때 생성된 경로도 이를 기반으로 생성됩니다. 예를 들어, com.companyname.project-group, Maven은 이 프로젝트를 jar 패키지로 만들어 로컬 경로에 저장합니다:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 프로젝트의 유일한 ID입니다. 하나의 groupId 아래 여러 개의 프로젝트가 있을 수 있으며, artifactId를 통해 구분됩니다 -->
    <artifactId>project</artifactId>
 
    <!-- 버전 번호 -->
    내부에, 버전 번호 범위로 설정할 수도 있습니다.1.0</dependency>/<version>
</project>

명령 프롬프트에서 MVN에 접속합니다/프로젝트 디렉토리에서 다음 명령어를 실행합니다:

C:\MVN\프로젝트>mvn help:effective-pom

Maven will start processing and display effective-pom。

[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:36 min
[INFO] Finished at: 2018-09-05T11:31:28+08:00
[INFO] Final Memory: 15M/149M
[INFO] ------------------------------------------------------------------------

The result of Effective POM is like it is displayed in the console, after inheritance and interpolation, making the configuration effective.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51             -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/           -->
<!--                                                                   -->
<!-- ================================================================= -->
 
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Effective POM for project                                         -->
<!-- 'com.companyname.project-group:project-name:jar:1.0'              -->
<!--                                                                   -->
<!-- ================================================================= -->
 
<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 h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.companyname.project-group</groupId>
  <artifactId>project</artifactId>
  내부에, 버전 번호 범위로 설정할 수도 있습니다.1.0</dependency>/<version>
  <build
    <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
    <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
    <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
    <resources
      <resource
        <mergeId>resource</mergeId>-0</directory>/mergeId>
        <directory>C:\MVN\project\src\main\resources</directory>/directory>
      </resource>
    </resources>
    <testResources
      <testResource
        <mergeId>resource</mergeId>-1</mergeId>
        <directory>C:\MVN\project\src\test\resources</directory>/directory>
      </testResource>
    </testResources>
    <directory>C:\MVN\project\target</directory>/directory>
    <finalName>project</finalName>-1.0</dependency>/finalName>
    <pluginManagement
      <plugins>
        <plugin>
          의존성 artifact ID-antrun-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.1.3</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-assembly-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.2-beta-2</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-clean-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.2</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-compiler-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.0.2</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-dependency-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.0</dependency>/<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-deploy-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.4</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-ear-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.3.1</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-ejb-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.1</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-install-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.2</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-jar-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.2</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-javadoc-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.5</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-plugin-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.4.3</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-rar-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.2</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-release-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.0-beta-8</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-resources-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.3</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-site-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.0-beta-7</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-source-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.0.4</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-surefire-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.4.3</<version>
        </<plugin>
        <plugin>
          의존성 artifact ID-war-plugin/artifactId>
          내부에, 버전 번호 범위로 설정할 수도 있습니다.2.1-alpha-2</<version>
        </<plugin>
      </<plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        의존성 artifact ID-help-plugin/artifactId>
        내부에, 버전 번호 범위로 설정할 수도 있습니다.2.1.1</<version>
      </<plugin>
    </<plugins>
  </build>
  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>/enabled>
      </snapshots>
      <id>central</id>/id>
      <name>Maven Repository Switchboard</name>/<name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>/updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>/enabled>
      </snapshots>
      <id>central</id>/id>
      <name>Maven Plugin Repository</name>/<name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepository>
  <reporting
    <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  </<reporting>
</project>

위의 pom.xml에서 Maven이 목표를 실행할 때 필요한 기본 프로젝트 소스 디렉토리 구조, 출력 디렉토리, 필요한 플러그인, 저장소 및 보고서 디렉토리를 볼 수 있습니다.

Maven의 pom.xml 파일도 수동으로 작성할 필요가 없습니다.

Maven은 프로젝트를 생성하기 위한 많은 프로토타입 플러그인을 제공합니다. 이其中包括 프로젝트 구조와 pom.xml입니다.

POM 태그 전체 설명

<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.0http://maven.apache.org/maven-v4_0_0.xsd">
    <!--부모 프로젝트의 좌표입니다. 프로젝트에서 특정 요소의 값을 지정하지 않으면, 부모 프로젝트의 해당 값을 프로젝트의 기본 값으로 사용합니다. 좌표는 group ID, artifact ID 및 
        version。 -->
    <parent>
        <!--被繼承的父項目的構件識別符 -->
        <artifactId />
        <!--被繼承的父項目的全球唯一識別符 -->
        <groupId />
        <!--被繼承的父項目的版本 -->
        <version />
        <!-- 父項目的pom.xml文件的相對路徑。相對路徑允許你選擇一個不同的路徑。默認值是../pom.xml。Maven首先在構建當前項目的地方尋找父項 
            目的pom,其次在文件系統的這個位置(relativePath位置),然後在本地倉庫,最後在遠程倉庫尋找父項目的pom。 -->
        <relativePath />
    </parent>
    <!--聲明項目描述符遵循哪一個POM模型版本。模型本身的版本很少變動,雖然如此,但它仍然是必不可少的,這是為了當Maven引入了新的特性或者其他模型變更的時候,確保穩定性。 -->
    <modelVersion>4.0.0</modelVersion>
    <!--項目的全球唯一識別符,通常使用全限定的包名區分該項目和其他項目。並且構建時生成的路徑也是由此生成, 如com.mycompany.app生成的相對路徑為:/com/mycompany/app -->
    <groupId>asia.banseon</groupId>
    <!-- 構件的識別符,它和group ID一起唯一識別一個構件。换句话说,你不能有兩個不同的項目擁有同樣的artifact ID和groupID;在某个 
        特定的group ID下,artifact ID也必須是唯一的。構件是項目生成的或使用的一個東西,Maven為項目生成的構件包括:JARs,源 碼,二進制發布和WARs等。 -->
    <artifactId>banseon-maven2</artifactId>
    <!--項目生成的構件類型,例如jar、war、ear、pom。插件可以創建他們自己的構件類型,所以前面列的不是全部構件類型 -->
    <packaging>jar</packaging>
    <!--項目當前版本,格式為:主版本.次版本.增量版本-限定版本號 -->
    내부에, 버전 번호 범위로 설정할 수도 있습니다.1.0-SNAPSHOT</<version>
    <!--項目的名稱, Maven生成的文檔用 -->
    <name>banseon-maven</<name>
    <!--項目主頁的URL, Maven生成的文檔用 -->
    <url>http://www.baidu.com/banseon</url>
    <!-- 項目的詳細描述, Maven 生成的文檔用。 當這個元素能用HTML格式描述時(例如,CDATA中的文本會被解析器忽略,就可以包含HTML標 
        簽), 不鼓勵使用純文本描述。如果你需要修改生成的web站點的索引頁面,你应该修改你自己的索引頁文件,而不是調整這裡的文檔。 -->
    <description>A maven project to study maven.</description>
    <!--이 프로젝트 빌드 환경의 전제 조건을 설명합니다 -->
    <prerequisites
        <!--이 프로젝트를 빌드하거나 플러그인을 사용하기 위해 필요한 Maven의 최소 버전 -->
        <maven />
    </prerequisites>
    <!--프로젝트의 문제 관리 시스템(Bugzilla, Jira, Scarab 또는 좋아하는 어떤 문제 관리 시스템이든)의 이름과 URL, 예제로는 jira -->
    <issueManagement
        <!--문제 관리 시스템(예: jira)의 이름이 -->
        <system>jira</system>
        <!--이 프로젝트가 사용하는 문제 관리 시스템의 URL -->
        <url>http://jira.baidu.com/banseon</url>
    </issueManagement>
    <!--프로젝트 지속적 통합 정보 -->
    <ciManagement
        <!--지속적 통합 시스템의 이름, 예를 들어 continuum -->
        <system />
        <!--이 프로젝트가 사용하는 지속적 통합 시스템의 URL(지속적 통합 시스템이 웹 인터페이스를 가지고 있다면). -->
        <url />
        <!--빌드가 완료될 때 알림을 받아야 하는 개발자/사용자 설정 항목. 알림 수신자 정보와 알림 조건(오류, 실패, 성공, 경고)을 포함합니다 -->
        <notifiers
            <!--빌드가 중단될 때 사용자에게 알림을 보내는 방법을 설정합니다/개발자 -->
            <notifier
                <!--알림을 전송하는 방법 -->
                <type />
                <!--오류가 발생할 때 알림을 보내는지 -->
                <sendOnError />
                <!--빌드가 실패할 때 알림을 보내는지 -->
                <sendOnFailure />
                <!--빌드가 성공할 때 알림을 보내는지 -->
                <sendOnSuccess />
                <!--경고가 발생할 때 알림을 보내는지 -->
                <sendOnWarning />
                <!--사용하지 않는 것이 좋습니다. 알림이 어디로 보내질지 -->
                <address />
                <!--확장 설정 항목 -->
                <configuration />
            </notifier>
        </notifiers>
    </ciManagement>
    <!--프로젝트 생성 연도가4숫자입니다. 저작권 정보를 생성할 때 이 값을 사용해야 합니다 -->
    <inceptionYear />
    <!--프로젝트와 관련된 메일 목록 정보 -->
    <mailingLists>
        <!--이 요소는 프로젝트와 관련된 모든 메일 목록을 설명합니다. 자동으로 생성된 웹 참조는 이 정보를 사용합니다 -->
        <mailingList>
            <!--메일의 이름 -->
            <name>Demo</<name>
            <!--메일 주소나 링크를 보내는 주소, 메일 주소라면 문서를 생성할 때 mailto: 링크가 자동으로 생성됩니다 -->
            <post>[email protected]</post>
            <!--메일 주소나 링크를 구독하면, 메일 주소라면 문서를 생성할 때 mailto: 링크가 자동으로 생성됩니다 -->
            <subscribe>[email protected]</subscribe>
            <!--메일을 취소할 수 있는 주소나 링크, 메일 주소라면, 문서를 생성할 때 mailto: 링크가 자동으로 생성됩니다 -->
            <unsubscribe>[email protected]</unsubscribe>
            <!--메일 정보를 볼 수 있는 URL을 탐색할 수 있습니다 -->
            <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
        </mailingList>
    </mailingLists>
    <!--프로젝트 개발자 목록 -->
    <developers
        <!--특정 프로젝트 개발자의 정보 -->
        <developer
            <!--SCM에서 프로젝트 개발자의 유일한 식별자 -->
            <id>HELLO WORLD</id>
            <!--프로젝트 개발자의 전체 이름 -->
            <name>banseon</<name>
            <!--프로젝트 개발자의 이메일 -->
            <email>[email protected]</email>
            <!--프로젝트 개발자의 홈페이지 URL -->
            <url />
            <!--프로젝트 개발자가 프로젝트에서 맡는 역할, 역할 요소는 다양한 역할을 설명합니다 -->
            <roles
                <role>Project Manager</role>
                <role>Architect</role>
            </roles>
            <!--프로젝트 개발자가 속한 조직 -->
            <organization>demo</organization>
            <!--프로젝트 개발자가 속한 조직의 URL -->
            <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
            <!--프로젝트 개발자의 속성, 예를 들어 즉시 메시지가 어떻게 처리되는지 등 -->
            <properties
                <dept>No</dept>
            </properties>
            <!--프로젝트 개발자의 시간대. -11부터12범위 내의 정수. -->
            <timezone-5</timezone>
        </developer>
    </developers>
    <!--프로젝트의 다른 기여자 목록 -->
    <contributors
        <!--프로젝트의 다른 기여자들. developers 참조/developer 요소 -->
        <contributor
            <name />
            <email />
            <url />
            <organization />
            <organizationUrl />
            <roles />
            <timezone />
            <properties />
        </contributor>
    </contributors>
    <!--이 요소는 프로젝트의 모든 라이선스 목록을 설명합니다. 프로젝트의 라이선스 목록만列出해야하며, 종속 프로젝트의 라이선스 목록은列出하지 마세요. 여러 라이선스가列出되면, 사용자는 그 중 하나를 선택할 수 있으며 모든 라이선스를 받아들이는 것은 선택이 아닙니다. -->
    <licenses>
        <!--프로젝트 라이선스를 설명하며, 프로젝트 웹 사이트의 라이선스 페이지, 다른 보고서 및��정에 사용됩니다. -->
        <license>
            <!--법적 명칭으로 사용되는 라이선스 -->
            <name>Apache 2</<name>
            <!--공식 라이선스 본문 페이지의 URL -->
            <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>
            <!--프로젝트 배포의 주요 방식: repo, Maven 라이브러리에서 다운로드할 수 있습니다 manual, 사용자는 수동으로 다운로드하고 설치해야 합니다 -->
            <distribution>repo</distribution>
            <!--라이선스에 대한 추가 정보 -->
            <comments>A business-친절한 OSS 라이선스</comments>
        </license>
    </licenses>
    <!--SCM(Source Control Management) 태그는 Maven 웹 사이트와 다른 플러그인이 사용할 수 있는 코드 라이브러리를 구성하도록 허용합니다. -->
    <scm>
        <!--SCM의 URL, 이 URL은 버전 라이브러리와 버전 라이브러리에 연결하는 방법을 설명합니다. 자세한 내용은 SCM이 제공하는 URL 형식과 목록을 참조하세요. 이 연결은 읽기 전용입니다. -->
        <connection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
        </connection>
        <!--개발자가 사용하는 것과 유사한 connection 요소입니다. 즉, 이 연결은 읽기 전용이 아닙니다 -->
        <developerConnection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
        </developerConnection>
        <!--현재 코드의 태그, 개발 단계에서는 기본적으로 HEAD로 설정됩니다 -->
        <tag />
        <!--프로젝트의 탐색 가능한 SCM 라이브러리(예: ViewVC 또는 Fisheye)의 URL을 가리킵니다. -->
        <url>http://svn.baidu.com/banseon</url>
    </scm>
    <!--프로젝트가 속한 기관의 여러 속성을 설명합니다. Maven가 생성하는 문서는 -->
    <organization>
        <!--기관의 전체 이름 -->
        <name>demo</<name>
        <!--기관 홈페이지의 URL -->
        <url>http://www.baidu.com/banseon</url>
    </organization>
    <!--프로젝트를 빌드하기 위해 필요한 정보 -->
    <build
        <!--이 요소는 프로젝트 소스 코드 디렉토리를 설정합니다. 프로젝트를 빌드할 때, 빌드 시스템은 디렉토리에 있는 소스 코드를 컴파일합니다. 이 경로는 pom.xml에 대한 상대 경로입니다. -->
        <sourceDirectory />
        <!--이 요소는 프로젝트 스크립트 소스 코드 디렉토리를 설정합니다. 이 디렉토리와 소스 코드 디렉토리는 다릅니다: 대부분의 경우, 이 디렉토리에 있는 내용이 출력 디렉토리로 복사됩니다(스크립트는编译되지 않고, 해석됩니다). -->
        <scriptSourceDirectory />
        <!--이 요소는 프로젝트 유닛 테스트에서 사용하는 소스 코드 디렉토리를 설정합니다. 테스트 프로젝트를 때, 빌드 시스템은 이 디렉토리의 소스 코드를 컴파일합니다. 이 경로는 pom.xml에 상대적입니다 -->
        <testSourceDirectory />
        <!--컴파일된 응용 프로그램 class 파일이 저장되는 디렉토리 -->
        <outputDirectory />
        <!--컴파일된 테스트 class 파일이 저장되는 디렉토리 -->
        <testOutputDirectory />
        <!--이 프로젝트에서 사용된 빌드 확장을 사용합니다 -->
        <extensions>
            <!--사용된 빌드 확장을 설명합니다 -->
            <extension>
                <!--빌드 확장의 groupId -->
                <groupId />
                <!--빌드 확장의 artifactId -->
                <artifactId />
                <!--빌드 확장의 버전 -->
                <version />
            </extension>
        </extensions>
        <!--프로젝트가 목표를 지정하지 않았을 때(Maven)2 명칭된 단계(예: build)에 대한 기본 값 -->
        <defaultGoal />
        <!--이 요소는 프로젝트와 관련된 모든 자원 경로 목록을 설명합니다. 예를 들어, 프로젝트와 관련된 속성 파일. 이 자원은 최종 패키지 파일에 포함됩니다 -->
        <resources
            <!--이 요소는 프로젝트나 테스트와 관련된 모든 자원 경로를 설명합니다 -->
            <resource
                <!-- 자원의 목표 경로를 설명합니다. 이 경로는 target에 상대적입니다/classes 디렉토리(예: ${project.build.outputDirectory})에 대한 설명. 예를 들어 
                    서브, 만약 당신이 특정 패키지에서 자원을 저장하고 싶다면(예: org.apache.maven.messages), 이 요소를 org로 설정해야 합니다/apache/maven /messages. 하지만, 만약 당신이 단지 소스 코드 디렉토리 구조에 자원을 넣고 싶다면, 이 설정은 필요하지 않습니다. -->
                <targetPath />
                <!--파라미터 이름 대신 파라미터 값 사용할지 여부. 파라미터 값은 properties 요소에서나 파일에 설정된 속성에서 가져옵니다. 파일은 filters 요소에 나열됩니다 -->
                <filtering />
                <!--자원을 저장하는 디렉토리 설명, 이 경로는 POM 경로에 상대적입니다 -->
                <directory />
                <!--포함될 패턴 목록, 예를 들어**/*.xml. -->
                <includes />
                <!--제외될 패턴 목록, 예를 들어**/*.xml -->
                <excludes />
            </resource>
        </resources>
        <!--이 요소는 유닛 테스트와 관련된 모든 자원 경로를 설명합니다. 예를 들어, 유닛 테스트와 관련된 속성 파일. -->
        <testResources
            <!--이 요소는 테스트와 관련된 모든 자원 경로를 설명합니다. build을 참조하세요/resources/resource 요소 설명 -->
            <testResource
                <targetPath />
                <filtering />
                <directory />
                <includes />
                <excludes />
            </testResource>
        </testResources>
        <!--빌드에서 생성된 모든 파일이 저장되는 디렉토리 -->
        <directory />
        <!--생성된 구성 요소의 파일 이름, 기본 값은 ${artifactId}-${version} -->
        <finalName />
        <!--filtering 스위치가 열릴 때 사용되는 필터 속성 파일 목록 -->
        <filters />
        <!--서브 프로젝트가 참조할 수 있는 기본 플러그인 정보. 이 플러그인 설정 항목은 참조될 때까지 해석되거나 라이프 사이클에 바인딩됩니다. 주어진 플러그인의 모든 로컬 설정은 여기의 설정을 덮습니다 -->
        <pluginManagement
            <!--사용 중인 플러그인 목록 -->
            <plugins>
                <!--plugin 요소는插件이 필요로 하는 정보를 포함하고 있습니다. -->
                <plugin>
                    <!--가젯이 저장소에 있는 그룹 ID -->
                    <groupId />
                    <!--插件在仓库里的artifact ID -->
                    <artifactId />
                    <!--被使用的插件的版本(或版本范围) -->
                    <version />
                    <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。 -->
                    <extensions />
                    <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 -->
                    <executions
                        <!--execution元素包含了插件执行需要的信息 -->
                        <execution
                            <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 -->
                            <id />
                            <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 -->
                            <phase />
                            <!--配置的执行目标 -->
                            <goals />
                            <!--配置是否被传播到子POM -->
                            <inherited />
                            <!--作为DOM对象的配置 -->
                            <configuration />
                        </execution>
                    </executions>
                    <!--项目引入插件所需要的额外依赖 -->
                    <dependencies>
                        <!--dependencies를 참조하세요/dependency 요소 -->
                        <dependency>
                            ......
                        </<dependency>
                    </<dependencies>
                    <!--설정이 자식 프로젝트로 전파되는지 설정 -->
                    <inherited />
                    <!--作为DOM对象的配置 -->
                    <configuration />
                </<plugin>
            </<plugins>
        </pluginManagement>
        <!--使用的插件列表 -->
        <plugins>
            <!--build를 참조하십시오/pluginManagement/plugins/plugin 요소 -->
            <plugin>
                <groupId />
                <artifactId />
                <version />
                <extensions />
                <executions
                    <execution
                        <id />
                        <phase />
                        <goals />
                        <inherited />
                        <configuration />
                    </execution>
                </executions>
                <dependencies>
                    <!--dependencies를 참조하세요/dependency 요소 -->
                    <dependency>
                        ......
                    </<dependency>
                </<dependencies>
                <goals />
                <inherited />
                <configuration />
            </<plugin>
        </<plugins>
    </build>
    <!--在列的项目构建profile,如果被激活,会修改构建处理 -->
    
        <!--根据环境参数或命令行参数激活某个构建处理 -->
        
            <!--构建配置的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。 -->
            <id />
            <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。profile的力量来自于它 能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。 -->
            
                <!--profile默认是否激活的标志 -->
                
            </pluginRepository>
            <!--pluginRepositories> -->
            <dependencies>
                <!--dependencies를 참조하세요/dependency 요소 -->
                <dependency>
                    ......
                </<dependency>
            </<dependencies>
            <!--사용하지 않는 것이 좋습니다. 현재 Maven은 이 요소를 무시합니다. -->
            <reports />
            <!--이 요소는 보고插件을 사용하여 보고서를 생성하는 규범을 포함하고 있습니다. 사용자가 "mvn site"을 실행할 때, 이 보고서들이 실행됩니다. 페이지 탐색 단축 표시줄에서 모든 보고서의 링크를 볼 수 있습니다. reporting 요소를 참조하십시오 -->
            <reporting
                ......
            </<reporting>
            <!--dependencyManagement 요소를 참조하십시오 -->
            <dependencyManagement>
                <dependencies>
                    <!--dependencies를 참조하세요/dependency 요소 -->
                    <dependency>
                        ......
                    </<dependency>
                </<dependencies>
            </<dependencyManagement>
            <!--distributionManagement 요소를 참조하십시오 -->
            <distributionManagement>
                ......
            </distributionManagement>
            <!--properties 요소를 참조하세요 -->
            <properties />
        </profile>
    </profiles>
    <!--모듈( 때로는 서브 프로젝트라고도 합니다)은 프로젝트의 일부로 구축됩니다. 목록에 있는 각 모듈 요소는 해당 모듈의 디렉토리로의 상대 경로를 가리킵니다 -->
    <modules />
    <!--의존성과 확장을 찾는 원격 저장소 목록을 발견합니다 -->
    <repositories>
        <!--원격 저장소에 연결할 필요가 있는 정보를 포함합니다 -->
        <repository>
            <!--원격 저장소에서 출시 버전 다운로드를 처리하는 방법 -->
            <releases>
                <!--true 또는 false는 이 저장소가 특정 유형의 소스 요소( 출시 버전, 스냅샷 버전) 다운로드를 위해 활성화되었는지 여부를 나타냅니다 -->
                <enabled />
                <!--이 요소는 업데이트가 발생하는 횟수를 지정합니다. Maven은 로컬 POM과 원격 POM의 타임스탬프를 비교합니다. 여기서의 옵션은: always( 항상), daily( 기본, 매일), interval: X( 여기서 X은 분 단위의 시간 간격입니다), 또는 never( 결코) -->
                <updatePolicy />
                <!--Maven이 소스 요소 검증 파일을 검증할 때 실패하면 어떻게 할지: ignore( 무시), fail( 실패), 또는 warn( 경고) -->
                <checksumPolicy />
            </releases>
            <!-- 원격 저장소에서 스냅샷 버전 다운로드를 처리하는 방법 
                정책. 예를 들어, 스냅샷 버전 다운로드를 개발 목적만 위해 활성화하려는 사람이 있을 수 있습니다. repositories를 참조하세요/repository/releases 요소 -->
            <snapshots>
                <enabled />
                <updatePolicy />
                <checksumPolicy />
            </snapshots>
            <!--원격 저장소의 유일한 식별자입니다. settings.xml 파일에 구성된 원격 저장소와 일치시킬 수 있습니다 -->
            <id>banseon-repository-proxy</id>
            <!--원격 저장소 이름 -->
            <name>banseon-repository-proxy</<name>
            <!--원격 저장소 URL, protocol에 따라//hostname/path형식 -->
            <url>http://192.168.1.169:9999/repository/</url>
            <!-- 소스 요소를 위치시키고 정렬하는 저장소 레이아웃 유형-default(기본) 또는 legacy(유산)로 할 수 있습니다. Maven 2그 저장소에 기본 레이아웃을 제공합니다; 그런 다음 
                그리고 Maven 1.x는 다른 레이아웃을 가지고 있습니다. 이 요소를 사용하여 레이아웃이 default(기본)이거나 legacy(유산)인지를 지정할 수 있습니다 -->
            <layout>default</layout>
        </repository>
    </repositories>
    <!--건설 및 보고서를 위해 사용되는 플러그인의 원격 저장소 목록을 찾습니다 -->
    <pluginRepositories>
        <!--빠른 연결이 필요한 원격 플러그인 저장소 정보를 포함합니다. repositories를 참조하세요/repository 요소 -->
        <pluginRepository>
            ......
        </pluginRepository>
    </pluginRepository>
 
 
    <!--pluginRepositories> -->
    <dependencies>
        <dependency>
            <!--이 요소는 프로젝트와 관련된 모든 의존성을 설명합니다. 이 의존성들은 프로젝트 빌드 과정의 각 단계로 구성됩니다. 이들은 프로젝트가 정의한 저장소에서 자동으로 다운로드됩니다. 자세한 내용은 프로젝트 의존성 메커니즘을 참조하세요 -->
            의존성 group ID/groupId>
            <!--<groupId>org.apache.maven< -->
            의존성 artifact ID-<artifactId>maven/artifactId>
            <!--artifact< 2의존성 버전 번호. Maven에서 -->
            내부에, 버전 번호 범위로 설정할 수도 있습니다.3.8.1</<version>
            <!-- version> 
                의존성 타입, 기본 타입은 jar입니다. 일반적으로 의존성 파일의 확장자를 나타냅니다. 그러나 예외도 있습니다. 타입은 다른 확장자나 분류자로 맵핑될 수 있습니다. 타입은 종종 사용하는 패키지 방식과 일치합니다.-하지만 예외도 있습니다. 일부 타입의 예시: jar, war, ejb-jar. extensions를 true로 설정하면 plugin에서 새로운 타입을 정의할 수 있습니다. 따라서 이전 타입의 인스턴스는 불완전합니다. client와 test -->
            <type>jar</type>
            <!-- 의존성 분류자. 분류자는 동일한 POM에 있지만 다른 빌드 방식의 구성 요소를 구분할 수 있습니다. 분류자 이름은 파일 이름의 버전 번호 뒤에 추가됩니다. 예를 들어, 두 개의 별도의 구성 요소를 빌드하고 싶다면 
                JAR, 하나는 Java를 사용합니다 1.4컴파일러를 사용하면, 또 다른 하나는 Java를 사용합니다 6컴파일러를 사용하면, 분류자를 사용하여 두 개의 별도의 JAR 구성 요소를 생성할 수 있습니다. -->
            <classifier></classifier>
            <!--의존성 범위. 프로젝트 배포 과정에서 포함되는 구성 요소를 결정하는 데 도움을 줍니다. 자세한 내용은 의존성 메커니즘을 참조하세요 - compile : 기본 범위, 컴파일에 사용됩니다 - provided: 컴파일과 유사하지만 JDK나 컨테이너가 제공할 것을 기대할 수 있는 경우, classpath과 유사합니다 
                - runtime: 실행할 때 필요합니다 - test: test 작업에서 사용됩니다 - system: 외부에서 제공해야 하는 요소입니다. systemPath를 통해 얻습니다 
                - systemPath: 범위가 system인 경우에만 사용됩니다. 필요한 경로를 제공합니다 - optional: 프로젝트가 의존성으로 사용될 때, 의존성이 전달되는지 표시합니다. 연속 의존성에서 사용됩니다 -->
            <scope>test</scope>
            <!--system 범위에서만 사용하세요. 주의하시오, 이 요소를 사용하지 않는 것이 좋으며, 새로운 버전에서는 이 요소가 덮어질 수 있습니다. 이 요소는 파일 시스템 경로에 대한 의존성을 지정합니다. 상대 경로 대신 절대 경로를 사용해야 합니다. 예를 들어 ${java.home}와 같은 절대 경로를 매칭하는 속성을 사용하는 것이 좋습니다. -->
            <systemPath></systemPath>
            <!--전달 의존성을 계산할 때, 의존성 구성 요소 목록에서 제외된 의존성 구성 요소 셋을 나열합니다. 즉, Maven에게 특정 프로젝트에 의존하며, 프로젝트의 의존성에 의존하지 않는다는 것을 알립니다. 이 요소는 주로 버전 충돌 문제를 해결하는 데 사용됩니다. -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
            <!--선택 의존성, 프로젝트 B에서 C 의존성을 선택 의존성으로 선언하면, B에 의존하는 프로젝트(예: 프로젝트 A)에서 C 의존성을 명시적으로 참조해야 합니다. 선택 의존성은 의존성의 전파성을 차단합니다. -->
            <optional>true</optional>
        </<dependency>
    </<dependencies>
    <!--사용하지 않는 것이 좋습니다. 현재 Maven은 이 요소를 무시합니다. -->
    <reports></reports>
    <!--이 요소는 보고서 플러그인을 사용하여 보고서를 생성하는 규격을 설명합니다. 사용자가 "mvn site"을 실행할 때, 이 보고서들이 실행됩니다. 페이지 탐색 탐구 라인에서 모든 보고서의 링크를 볼 수 있습니다. -->
    <reporting
        <!--true, 그렇다면, 웹사이트는 기본 보고서를 포함하지 않습니다. 이는 "프로젝트 정보" 메뉴에 포함된 보고서를 포함합니다. -->
        <excludeDefaults />
        <!--모든 생성된 보고서가 저장되는 위치. 기본 값은 ${project.build.directory}/site. -->
        <outputDirectory />
        <!--사용되는 보고서 플러그인과 그들의 설정 -->
        <plugins>
            <!--plugin 요소는 보고서 플러그인이 필요로 하는 정보를 포함합니다 -->
            <plugin>
                <!--보고서 플러그인이 저장소에서의 group ID -->
                <groupId />
                <!--보고서 플러그인이 저장소에서의 artifact ID -->
                <artifactId />
                <!--사용되는 보고서 플러그인의 버전(또는 버전 범위) -->
                <version />
                <!--설정이 자식 프로젝트로 전파되는지 설정 -->
                <inherited />
                <!--보고서 플러그인의 설정 -->
                <configuration />
                <!--보고서 셋트의 다중 규격, 각 규격은 다른 설정이 있을 수 있습니다. 규격(보고서 셋트)은 하나의 실행 대상에 해당합니다. 예를 들어, 다음과 같이 있습니다.1،2،3،4،5،6،7،8،9개 보고서.1،2،5A 보고서 셋트를 구성, 하나의 실행 대상에 해당2،5،8B 보고서 셋트를 구성, 다른 실행 대상에 해당 -->
                <reportSets>
                    <!--보고서의 하나의 셋트를 나타내며, 그 셋트를 생성하는 설정 -->
                    <reportSet>
                        <!--보고서 셋트의 유일한 식별자, POM 상속 시 사용 -->
                        <id />
                        <!--보고서 셋트를 생성할 때 사용되는 보고서의 설정 -->
                        <configuration />
                        <!--설정이 자식 POMs에 상속되는지 설정 -->
                        <inherited />
                        <!--이 셋트에서 사용되는 어떤 보고서가 있는지 -->
                        <reports />
                    </reportSet>
                </reportSets>
            </<plugin>
        </<plugins>
    </<reporting>
    <!-- 이 프로젝트에서 모든 서브 프로젝트가 상속하는 기본 의존성 정보. 이 부분의 의존성 정보는 즉시 해석되지 않으며, 서브 프로젝트가 의존성을 선언할 때(group ID와 artifact ID를 설명해야 합니다) 사용됩니다 
        ID 정보(예: group ID와 artifact ID)가 포함되어 있지 않으면, group ID와 artifact ID를 통해 여기에 있는 의존성을 일치시키고, 여기에 있는 의존성 정보를 사용합니다 -->
    <dependencyManagement>
        <dependencies>
            <!--dependencies를 참조하세요/dependency 요소 -->
            <dependency>
                ......
            </<dependency>
        </<dependencies>
    </<dependencyManagement>
    <!--프로젝트 배포 정보, mvn deploy를 실행할 때 배포 위치를 나타냅니다. 이 정보가 있으면 웹사이트를 원격 서버에 배포하거나 구성 요소를 원격 저장소에 배포할 수 있습니다 -->
    <distributionManagement>
        <!--프로젝트가 생성하는 구성 요소를 원격 저장소에 배포하는 데 필요한 정보 -->
        <repository>
            <!--스냅샷에 독립된 유일한 버전 번호(시간표시와 빌드 스트림 번호로 구성)를 할까요? 아니면 항상 같은 버전 번호를 사용할까요? repositories를 참조하세요/repository 요소 -->
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>banseon maven2</<name>
            <url>file://${basedir}/target/deploy</url>
            <layout />
        </repository>
        <!--构件의 스냅샷 배포는 어디로 할까요? 이 요소가 설정되지 않았다면, 기본적으로 distributionManagement 요소에 설정된 저장소에 배포됩니다. distributionManagement을 참조하세요/repository 요소 -->
        <snapshotRepository>
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>Banseon-maven2 Snapshot Repository</<name>
            <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
            <layout />
        </snapshotRepository>
        <!--배포 프로젝트의 웹사이트에 필요한 정보 -->
        <site>
            <!--배포 위치의 유일한 식별자로, 사이트와 settings.xml 파일에 있는 구성을 일치시키기 위해 사용됩니다 -->
            <id>banseon-site</id>
            <!--배포 위치의 이름 -->
            <name>business api website</<name>
            <!--배포 위치의 URL, 프로토콜에 따라://hostname/path형식 -->
            <url>
                scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
            </url>
        </site>
        <!--프로젝트 다운로드 페이지 URL. 이 요소가 없으면, 사용자는 메인 페이지를 참조해야 합니다. 이 요소를 사용하는 이유는: 라이선스 제한으로 저장소에 없는 구성 요소를 정위치할 수 있도록 도와줍니다. -->
        <downloadUrl />
        <!--구성 요소가 새 group ID와 artifact ID를 가지고 있으면(구성 요소가 새 위치로 이동되었으면), 이곳에 구성 요소의 재위치 정보를 나열합니다. -->
        <relocation>
            <!--구성 요소의 새 group ID -->
            <groupId />
            <!--구성 요소의 새 artifact ID -->
            <artifactId />
            <!--구성 요소의 새 버전 번호 -->
            <version />
            <!--사용자에게 표시할 추가 정보, 예: 이유 -->
            <message />
        </relocation>
        <!-- 서버 저장소에서 해당 구성 요소의 상태를 제공합니다. 로컬 프로젝트에서 이 요소를 설정하지 마세요. 이유는 이 요소는 도구가 자동으로 업데이트하기 때문입니다. 유효한 값은 다음과 같습니다: none(기본), converted(저장소 관리자가) 
            Maven 1 Maven 2로 동기화된), deployed(Maven에서 POM으로 변환된), partner(파트너 Maven에서 직접) 2예: 예시 배포, verified(확인된 정확하고 최종적인)) -->
        <status />
    </distributionManagement>
    <!--이름 대신 값 사용하여, Properties는 전체 POM에서 사용할 수 있으며, 설정 파일(activation 요소 설명 참조)에서 트리거 조건으로도 사용할 수 있습니다. 형식은 <name>value</name>. -->
    <properties />
</project>