maven-compiler-plugin

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.26
조회수
26
버전
v1

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-pluginsource/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 이상에서 사용 가능. sourcetarget을 동시에 설정하며, 플랫폼 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 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?