Maven Predefined Properties
1. 소개
이 튜토리얼에서는 Maven 내에서 미리 정의된 속성을 살펴보겠습니다. 속성은 빌드 구성을 보다 동적이고 유연하며 재사용 가능하게 만듭니다. 이를 통해 기본값을 갖는 다양한 수준의 속성을 설정하고 필요할 때 쉽게 오버라이드할 수 있습니다. 이러한 속성을 더 자세히 살펴보겠습니다.
2. Maven 미리 정의된 속성
Maven은 구성을 간소화하기 위해 사용할 수 있는 유용한 내장 속성을 제공합니다. 필요한 경우 이러한 속성을 pom.xml 파일에서 직접 사용자 정의할 수 있습니다. 이들은 Maven 리소스 플러그인의 필터링 기능으로 처리되는 모든 리소스 파일에도 사용할 수 있습니다. 예를 들어, application.properties 파일에서도 가능합니다. 사용할 때는 항상 ${}로 감싸 주면 됩니다.
2.1. 사용 예시
출력 디렉토리의 위치를 지정하는 속성의 사용 예를 살펴보겠습니다:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>example.override.properties</groupId>
<artifactId>parameter-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
위의 예시는 기본값인 ${project.build.directory}을 가져오는 방법을 보여줍니다. 즉, src/main/resources입니다.
2.2. 속성 오버라이드 예제
커스텀 빌드 경로를 제공하는 속성을 살펴보겠습니다:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>example.override.properties</groupId>
<artifactId>parameter-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<build>
<directory>src/main/resources/custom</directory>
</build>
</project>
위의 예에서는 속성 ${project.build.directory}의 기본값을 src/main/resources/custom으로 오버라이드했습니다. 이는 hierarchy
3. 프로젝트 정보 속성
프로젝트에 대한 정보, 구성, 메타데이터 및 빌드 정보를 참조하는 데 사용되는 몇 가지 속성을 살펴보겠습니다:
속성 | 설명 |
---|---|
${project.packaging} | 이 속성은 Maven이 우리 프로젝트에서 생성하는 아티팩트의 종류를 알려줍니다. 기본값은 “jar”입니다. |
${project.basedir} | 이 속성은 우리가 사용하는 pom.xml 파일이 위치한 프로젝트의 루트 디렉토리를 가리킵니다. |
${project.groupId} 및 ${project.version}와 같은 일부 속성은 명시적으로 지정하지 않으면 부모 POM에서 기본값을 상속받을 수 있습니다.
4. 프로젝트 빌드 정보 속성
이제 빌드 과정에서 생성되고 저장되는 것과 관련된 몇 가지 특정 속성을 살펴보겠습니다:
속성 | 설명 |
---|---|
${project.build.directory} | 이 속성은 빌드 과정에서 생성된 모든 파일의 중앙 허브 역할을 합니다. 기본값은 “target/”입니다. |
${project.build.outputDirectory} | 이 속성은 Maven이 메인 애플리케이션 코드를 컴파일한 클래스들을 저장하는 위치를 알려줍니다. 기본 값은 “target/classes”입니다. |
${project.build.testOutputDirectory} | 컴파일된 테스트 클래스가 기본적으로 “target/test-classes”에 저장됩니다. |
${project.build.sourceDirectory} | 이 속성은 주 Java 소스 코드가 위치한 디렉토리를 가리킵니다. 기본 위치는 “src/main/java”입니다. |
${project.build.testSourceDirectory} | 이 속성은 단위 테스트 소스 코드가 저장되는 위치를 알려줍니다. 기본값은 “src/test/java”입니다. |
${project.build.resources} | 이 속성은 모든 프로젝트 리소스 파일들이 들어 있는 디렉토리를 지정합니다. 기본 위치는 “src/main/resources”입니다. |
${project.build.testResources} | 이 속성은 테스트에 사용되는 리소스들을 위한 것으로, 기본적으로 “src/test/resources”에 위치합니다. |
${project.build.finalName} | 이 속성은 최종 빌드 아티팩트의 이름을 결정합니다. 기본값은 프로젝트의 아티팩트 ID와 버전 번호를 조합한 것으로, 예를 들어 “${project.artifactId}-${project.version}”입니다. |
5. 시스템 속성
자체 내장 속성 외에도 Maven은 컴퓨터의 Java 가상 머신(JVM) 또는 프로그램을 실행할 때 정의된 시스템 속성에 접근할 수 있습니다. 이러한 속성은 파일 경로나 운영 체제와 같은 환경별 세부사항을 위한 편리한 바로가기 역할을 합니다:
속성 | 설명 |
---|---|
${java.home} | 이 속성은 JDK 또는 JRE가 시스템에 설치된 위치를 알려줍니다. 이 속성은 직접 사용하지 않는 것이 좋습니다. |
${java.version} | 이 속성은 사용 중인 Java의 버전을 알려줍니다. |
${os.name} 및 ${os.version} | 이 두 속성은 현재 운영 체제(Windows 또는 macOS 등)와 버전 번호를 알려주기 위해 함께 작동합니다. |
${user.dir} | 이 속성은 Maven을 실행하는 현재 작업 디렉토리를 알려줍니다. |
6. Maven 전용 속성
Maven의 런타임 및 구성에 특정한 속성을 살펴보겠습니다:
속성 | 설명 |
---|---|
${maven.version} | 이 속성은 현재 실행 중인 Maven의 정확한 버전을 알려줍니다. |
${settings.localRepository} | 이 속성은 로컬 Maven 리포지토리의 위치를 가리킵니다. 기본적으로 ${user.home}/.m2/repository에 저장됩니다. |
${settings.interactiveMode} | 이 속성은 Maven이 빌드 과정에서 입력을 요청할 수 있는지를 결정합니다. 기본값은 true입니다. |
${settings.offline} | 이 속성은 Maven이 오프라인 모드에서 작동해야 하는지를 제어합니다. 기본적으로는 설정되어 있지 않지만, true로 설정하면 Maven은 로컬 리포지토리에 있는 의존성만 사용합니다. |
7. 결론
이 기사에서는 Maven이 제공하는 여러 내장 속성을 살펴보았습니다. 본질적으로 이러한 속성들은 우리 pom.xml 파일 내에서 설정을 쉽게 조정하고 변경할 수 있게 해줍니다.
게다가 경로, 값 또는 기타 구성을 하드코딩하는 대신 이러한 속성을 사용하는 것이 항상 좋은 방법입니다. 이는 프로젝트를 훨씬 더 유연하고 유지보수가 용이하게 만듭니다.