나의 취미/자바 이야기

메이븐 다른 버전의 자바 버전 실행

grandguy 2022. 5. 1. 12:08

스프링 부트로 작업을 하면서 최근 JDK 17을 사용하는 일과 기업용으로 JDK 1.8을 사용하는 경우가 혼재하게 되어서 메이븐의 toolchain기능을 사용하게 되었다.

 

toolchain기능을 사용하기 위해서는 maven 2.0.9이상을 사용하여야 한다.

다음은 toolchain의 기능을 인식하는 메이븐 플러그인이다.

Toolchain type Plugin Starting with Hosted at
jdk maven-compiler-plugin 2.1 Apache Maven
jdk maven-jarsigner-plugin 1.3 Apache Maven
jdk maven-javadoc-plugin 2.5 Apache Maven
jdk maven-pmd-plugin 3.14.0 Apache Maven
jdk maven-surefire-plugin 2.5 Apache Maven
jdk animal-sniffer-maven-plugin 1.3 MojoHaus
jdk cassandra-maven-plugin 0.7.0-1 MojoHaus
jdk exec-maven-plugin 1.1.1 MojoHaus
jdk jdiff-maven-plugin 1.0-beta-1-SNAPSHOT MojoHaus
jdk keytool-maven-plugin 1.4 MojoHaus
protobuf maven-protoc-plugin 0.3.2 github

1. toolchain을 사용하기 위해서는 toolchains.xml을 다음과 같이 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
  <!-- JDK toolchains -->
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>/home/java/jdk/jdk1.8.0_202</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>17</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>/home/java/jdk/jdk-17.0.1.12-hotspot</jdkHome>
    </configuration>
  </toolchain>
</toolchains>

2. toolchains.xml을 다음의 위치중 하나에 저장한다.

  • home/.m2
  • {maven_home}/conf
  • 메이븐 수행시 파라미터로 위치를 전달

3. 해당 프로젝트의 pom.xml을 실행하려는 버전에 맞도록 toolchain 플러그인의 configuration을 수정한다.

<build>
    <plugins>
    <plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-toolchains-plugin</artifactId>
		<version>3.0.0</version>
		<executions>
			<execution>
				<goals>
                    <goal>toolchain</goal>
                </goals>
                <configuration>
                    <toolchains>
                        <jdk>
                            <version>1.8</version>
                        </jdk>
                    </toolchains>
                </configuration>
			</execution>					
		</executions>
	</plugin>
    </plugins>
</build>