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 파일을 종속성에 추가
- IntelliJ IDEA#로컬의 특정 JAR 파일을 종속성에 추가
- Apache Ant -> build.xml#로컬의 특정 JAR 파일을 종속성에 추가
- Gradle -> build.gradle#로컬의 특정 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>