maven-compiler-plugin
maven-compiler-plugin
개요
mavencompiler-plugin은 Apache Maven 기 자바 프로트에서 소스 코드를 컴파일하는 데 사용되는 핵심적인 빌드 플러그인입니다. 이 플러그인은 Maven의 기본 라이프사이클 중 compile 단계에서 자동으로 실행되며, 프로젝트의 Java 소스 파일(.java)을 바이트코드(.class)로 변환하는 작업을 수행합니다.
Maven은 기본적으로 컴파일러 플러그인이 없더라도 [javac](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Java/javac) 명령어를 사용하여 컴파일을 시도하지만, maven-compiler-plugin을 명시적으로 설정함으로써 자바 버전, 컴파일 옵션, 소스/타겟 호환성 등을 정밀하게 제어할 수 있습니다. 이는 다수의 팀과 프로젝트에서 일관된 빌드 환경을 유지하는 데 매우 중요합니다.
주요 기능
1. 자바 버전 설정
maven-compiler-plugin은 프로젝트에서 사용할 자바 소스 버전(source)과 컴파일된 바이트코드의 실행 환경 버전(target)을 명시적으로 지정할 수 있습니다.
예를 들어, 자바 11로 개발하고자 할 때 다음과 같이 설정합니다:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
또는 플러그인 직접 설정을 통해:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
🔍 source vs target -
source: 사용할 Java 언어 문법의 버전 (예: 람다식,var키워드 등) -target: 생성된.class파일이 실행될 수 있는 JVM 버전
2. 컴파일 옵션 설정
추가적인 컴파일러 옵션을 설정할 수 있습니다. 예를 들어, 경고(warning)를 더 엄격하게 처리하거나, 디버그 정보 포함 여부 등을 제어할 수 있습니다.
<configuration>
<source>17</source>
<target>17</target>
<compilerArgs>
<arg>-Xlint:unchecked</arg>
<arg>-Xlint:deprecation</arg>
</compilerArgs>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
이 설정은 개발 중 경고 사항을 빠르게 파악하고, 유지보수성을 높이는 데 유용합니다.
3. 인코딩 설정
소스 파일의 문자 인코딩을 지정하여, 운영체제나 IDE 간 인코딩 불일치로 인한 컴파일 오류를 방지할 수 있습니다.
<configuration>
<encoding>UTF-8</encoding>
</configuration>
특히 한글 주석이나 다국어 문자를 포함한 프로젝트에서 필수적입니다.
사용 예시
다음은 [pom.xml](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%EA%B5%AC%EC%84%B1/pom.xml)에 maven-compiler-plugin을 정의하는 전체 예제입니다:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</build>
이 설정을 통해 프로젝트는 Java 17 기준으로 컴파일되며, UTF-8 인코딩이 적용되고, 경고 및 사용 중단된 API 사용 시 메시지가 출력됩니다.
최신 기능 및 주의사항
- Java 9 이상의 모듈 시스템 지원
Java 9부터 도입된 모듈 시스템([module-info.java](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Java/module-info.java))은 maven-compiler-plugin 버전 3.6.0 이상에서 완전히 지원됩니다. 모듈 기반 프로젝트를 빌드할 경우 플러그인 버전을 최신으로 유지하는 것이 중요합니다.
- 플러그인 버전 관리
Maven은 기본적으로 플러그인의 최신 안정 버전을 자동 선택하지만, 명시적으로 버전을 지정하는 것이 재현 가능한 빌드(reproducible build)를 보장하는 데 좋습니다.
- IDE와의 호환성
IntelliJ IDEA, Eclipse 등 IDE는 pom.xml의 설정을 읽어 프로젝트의 JDK 버전을 자동으로 설정합니다. 따라서 maven-compiler-plugin의 source/target 설정은 IDE와의 통합 빌드 환경 일치를 위해 필수적입니다.
관련 설정 및 팁
| 설정 항목 | 설명 |
|---|---|
[release](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Java/release) |
Java 9 이상에서 사용 가능. source와 target을 동시에 설정하며, 플랫폼 API의 호환성을 보장 |
[fork](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95/fork) |
별도의 JVM 프로세스에서 컴파일 실행 여부 (기본값: false) |
[executable](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95/executable) |
특정 javac 경로를 직접 지정 (예: 커스텀 JDK 사용 시) |
예:
<configuration>
<release>17</release>
<fork>true</fork>
<executable>/opt/jdk-17/bin/javac</executable>
</configuration>
참고 자료
이 문서는 Maven 기반 자바 프로젝트에서 빌드 일관성을 확보하고, 최신 자바 기능을 안정적으로 사용하기 위한 maven-compiler-plugin의 핵심 정보를 제공합니다. 프로젝트 초기 설정 시 반드시 포함되어야 할 플러그인 중 하나입니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.