Skip to content

Pom.xml

maven 프로젝트에 사용하는 그것.

Properties

  • modelVersion - POM 모델 버전
  • groupId - 프로젝트 그룹이나 조직의 고유 식별자를 나타냅니다.
  • artifactId - 그룹 내에서 프로젝트를 고유하게 식별하는 이름입니다.
  • name - 프로젝트이름
  • packaging - 패키지징 결과 포맷
  • version - 현재 프로젝트 버전을 나타냅니다. "SNAPSHOT"은 개발 중인 버전임을 의미합니다.
  • sourceDirectory - 소스코드 폴더 지정
  • properties - 변수 설정. 이후 ${...} 형식으로 접근 가능.
  • dependencies - 종속성 패키지 목록
  • plugins - Maven 빌드 과정에서 사용할 플러그인을 정의합니다.

Properties

  • project.basedir - 현재 프로젝트가있는 디렉토리. pom.xml 파일의 위치에 해당.
  • project.build.directory - 빌드에서 생성 된 모든 파일이있는 디렉토리입니다. 기본값은 "target"입니다.

Sample example

<?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>com.project</groupId>
    <artifactId>firebell</artifactId>
    <name>FirebellRest</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>

    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- More dependency -->

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>

            <!-- More Plugin -->

        </plugins>
    </build>
</project>

build

이 섹션은 Maven의 빌드 프로세스를 구성합니다. 다음의 예시로 설명:

    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
sourceDirectory
src 디렉터리를 소스 코드의 기본 디렉터리로 지정합니다.
일반적으로 Maven에서는 기본적으로 src/main/java를 소스 디렉터리로 사용합니다. 필요 시 이 값을 src로 변경하려고 지정한 것 같습니다.
plugins
Maven 빌드 프로세스에서 사용할 플러그인들을 나열하는 섹션입니다.
plugin
개별 플러그인을 정의하는 블록입니다.
여기에서는 maven-compiler-plugin을 사용합니다. 이 플러그인은 소스 코드를 컴파일하는 데 사용됩니다.
artifactId
Maven 플러그인의 이름을 지정합니다. 여기서는 maven-compiler-plugin입니다.
version
사용하려는 플러그인의 버전을 명시합니다. 이 경우 3.7.0 버전을 사용합니다.
configuration
플러그인에 전달할 추가 설정을 정의합니다.
  • source - Java 소스 코드의 버전을 지정합니다. 여기서는 Java 1.8을 사용합니다.
  • target - 컴파일된 클래스 파일의 대상 JVM 버전을 지정합니다. 여기서도 Java 1.8을 사용합니다.

dependencyManagement

Maven의 dependencyManagement는 프로젝트에서 종속성(dependency)의 버전과 범위를 중앙에서 관리할 수 있도록 제공되는 태그입니다. 이를 통해 다수의 모듈 또는 하위 프로젝트에서 동일한 의존성을 사용할 때, 일관된 버전을 유지하고 충돌을 방지할 수 있습니다.

  • 중앙화된 의존성 관리 - 부모 POM에서 의존성 버전과 범위를 정의하고, 자식 프로젝트에서 해당 의존성을 참조할 때 버전을 명시하지 않아도 됩니다. 일관된 버전 관리가 가능합니다.
  • 의존성 선언은 아님 - dependencyManagement에 선언된 의존성은 자동으로 프로젝트에 추가되지 않습니다. 이를 사용하려면 개별 프로젝트에서 명시적으로 dependencies에 추가해야 합니다.
  • 계층 구조에서 사용 - 주로 부모 POM에서 자식 프로젝트들에 공통적으로 적용될 의존성을 관리할 때 사용합니다.

로컬의 특정 JAR 파일을 종속성에 추가

systemPath를 사용하자.

  <dependency>
    <groupId>com.example</groupId>
    <artifactId>mseo-common</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/mseo-common_1.0.0.jar</systemPath>
  </dependency>

See also