programing

maven에서 Java 버전 지정 - 속성과 컴파일러 플러그인의 차이점

prostudy 2022. 5. 31. 07:46
반응형

maven에서 Java 버전 지정 - 속성과 컴파일러 플러그인의 차이점

저는 Maven에 대해 잘 알지 못하기 때문에 멀티 모듈 프로젝트를 실험하면서 어떻게 부모 Maven pom의 모든 자녀 모듈에 자바 버전을 지정할 수 있는지 고민하기 시작했습니다.지금까지 사용하고 있는 것은 다음과 같습니다.

<properties>
    <java.version>1.8</java.version>
</properties>

하지만 조사해보니 Maven 컴파일러 플러그인에서 다음과 같이 Java 버전을 지정할 수도 있더군요.

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

그런 다음 이를 플러그인 관리 태그로 줄 바꿈으로써 하위 펌을 사용할 수 있도록 합니다.첫 번째 질문은 다음과 같습니다.

속성 및 Maven 컴파일러 플러그인에서 Java 버전을 설정하는 bitwen의 차이점은 무엇입니까?

명확한 답을 찾을 수 없었지만 조사 중에 다음과 같은 방법으로 Java 버전을 지정할 수 있다는 것을 알게 되었습니다.

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

컴파일러 플러그인은 내가 명시적으로 선언하지 않아도 존재함을 시사한다..mvn package합니다.

maven-compiler-plugin:3.1:compile (default-compile) @ testproj ---

...그리고 내가 선언하지 않은 다른 플러그인들.

그럼 그 플러그인은 메이븐 폼의 기본 숨겨진 부분인가요?속성에서 소스/타겟을 설정하는 것과 Maven 플러그인 구성 요소에서 설정하는 것에 차이가 있습니까?

다른 질문으로는 어떤 방법을 사용해야 하는가(동일하지 않은 경우)가 있습니다.에 가장 한 것은 이 POM에서 경우 ?JAVA_HOME

JDK 버전을 지정하는 방법

방법 중 를 사용합니다. (1) Spring Boot Maven 은 (2) Spring Boot의 어느 쪽인가와 합니다.source&target또는 (3과 함께 (3)로 한다.release.

스프링 부트

  1. <java.version>메이븐을 만나다
    스프링 부트 사양입니다.
    및 1할 수 .Java 1.8은 Java 1.8로 합니다.

    1.8

Spring Boot을 사용하시는 분은 부담없이 사용하세요.

maven-compiler-pluginsource&target

  1. 「」를 사용합니다.maven-compiler-plugin ★★★★★★★★★★★★★★★★★」maven.compiler.source/maven.compiler.target속성은 동일합니다.

그것은 정말로:

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

는 다음과 같습니다.

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

컴파일러 플러그인의 Maven 문서에 따르면, 그 이후<source><target> "이러한 속성"이 됩니다.maven.compiler.source ★★★★★★★★★★★★★★★★★」maven.compiler.target츠요시

원천

-sourceJava ★★★★★★★★★★★★★★★★★★★★★★★★★★★」
은 다음과 같습니다.1.6.
은 다음과 같습니다.maven.compiler.source.

타깃

-targetJava ★★★★★★★★★★★★★★★★★★★★★★★★★★★」
은 다음과 같습니다.1.6.
은 다음과 같습니다.maven.compiler.target.

「」의 에 source ★★★★★★★★★★★★★★★★★」targetmaven 컴파일러 이후 기본값은 에서로 변경된 점에 주의해 주십시오.

maven-compiler-pluginreleasesource&target

  1. maven-compiler-plugin3.6은 새로운 이후음음음음음음음음음음음음음음음 and and and and and and and and and and and and.

    org.apache.maven.org.maven.maven.. maven-maven-3.09 플러그인 maven-maven-3.8.09

다음과 같이 선언할 수도 있습니다.

<properties>
    <maven.compiler.release>9</maven.compiler.release>
</properties>

, 이에서는, 지만 the the the the the the the the the the the the the로서 .maven-compiler-plugin사용하는 기본 버전은 충분한 최신 버전에 의존하지 않습니다.

★★★★★★★★★★★★★★★」release가 전하다release: Java 9에서 전달할 수 있는 새로운 JVM 표준 옵션:

특정 VM 버전에 대해 퍼블릭 API, 지원 API 및 문서화된 API를 기반으로 컴파일합니다.

하면 할 수 .source , . . . . . . . .targetbootstrapJVM 션 j
, 을 하면 됩니다.bootstrap교차 컴파일에 좋은 방법이며 교차 컴파일을 하지 않아도 문제가 되지 않습니다.


JDK 버전을 지정하는 가장 좋은 방법은 무엇입니까?

번째 방법 「 」 「 」 「 」 )<java.version> 부트를 에만 허용됩니다는 스프링 부트를 사용하는 경우에만 허용됩니다.

Java 8 이하의 경우:

다른 두 가지 방법에 대해: 가치의 평가maven.compiler.source/maven.compiler.target속성 또는 사용maven-compiler-plugin둘 중 하나를 사용할 수 있습니다.최종적으로 두 솔루션이 동일한 속성과 메커니즘인 maven 코어 컴파일러 플러그인에 의존하기 때문에 사실에는 변화가 없습니다.

컴파일러 플러그인에서 Java 버전 이외의 속성이나 동작을 지정할 필요가 없는 경우 이 방법을 사용하는 것이 보다 간결하기 때문에 더 적합합니다.

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Java 9부터:

release인수(세 번째 포인트)는 소스 및 타겟에 동일한 버전을 사용하는지를 강력히 검토하는 방법입니다.

JAVA_의 JDK 간에 버전이 다를 경우 어떻게 됩니까?HOME과 pom.xml에 지정된 것은 무엇입니까?

JDK가 .JAVA_HOME 컴파일 pom을 하는 것을 .bootstrapJVM의 rt.jartarget전입니니다다

서 중요한 은 '우리'는 '우리'는 '우리'는 '우리'는 '우리'와 ''는 '우리'는'sourcetarget은 Maven이 수 .JAVA_HOME.
이전 버전의 JDK는 사양을 모르기 때문에 최신 버전으로 컴파일할 수 없습니다.

사용된 JDK에 따라 소스, 타깃 및 릴리즈 지원 버전에 대한 자세한 내용은 Java 컴파일: source, targetrelease 지원 버전을 참조하십시오.


JAVA_가 참조하는 JDK의 케이스 처리 방법HOME은 pom에 지정된 Java 타깃 및/또는 소스 버전과 호환되지 않습니다.

를 들어, '하다'가 '하다'라고 ,JAVA_HOME1.및1.알 수 없기 때문입니다.pom.xml은 JDK 1.8의 컴파일 방법을 입니다.
그 후 발매된 것으로 보아 알 수 없는 JDK 버전입니다.
컴파일러

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerVersion>1.8</compilerVersion>      
        <fork>true</fork>
        <executable>D:\jdk1.8\bin\javac</executable>                
    </configuration>
</plugin>

maven 컴파일러 플러그인의 예에서 자세한 내용을 볼 수 있습니다.


요청은 없지만, 더 복잡한 경우는 소스를 지정하지만 대상을 지정하지 않는 경우입니다.소스 버전에 따라 대상에서 다른 버전을 사용할 수 있습니다.규칙은 특별합니다.규칙에 대한 내용은 "Cross-Compilation Options" 파트에서 확인할 수 있습니다.


Maven 시packagegal.xml에 요?

코드를 컴파일하고 보다 일반적으로 메이븐 목표에 필요한 모든 작업을 수행하기 위해 Maven은 도구가 필요합니다.코어 Maven 은 Maven 플러그인이 Maven의 Maven 플러그인으로 됩니다).groupIdorg.apache.maven.plugins필요한 작업: 클래스 컴파일용 컴파일러 플러그인, 테스트 실행용 테스트 플러그인 등...따라서 이러한 플러그인을 선언하지 않더라도 Maven 라이프사이클의 실행에 구속됩니다.
프로젝트의Maven 명령어를 할 수 .mvn help:effective-pom효과적으로 사용되는 최종 폼을 얻을 수 있습니다.Maven(pom.xml에 지정되어 있든 없든)에 의해 첨부된 플러그인과 함께 사용된 버전, 구성 및 라이프사이클의 각 단계에 대한 실행 목표를 확인할 수 있습니다.

「」의 mvn help:effective-pom을 「코어 플러그인의 선언」으로할 수 .<build><plugins>예를 들어 다음과 같습니다.

...
<plugin>
   <artifactId>maven-clean-plugin</artifactId>
   <version>2.5</version>
   <executions>
     <execution>
       <id>default-clean</id>
       <phase>clean</phase>
       <goals>
         <goal>clean</goal>
       </goals>
     </execution>
   </executions>
 </plugin>
 <plugin>
   <artifactId>maven-resources-plugin</artifactId>
   <version>2.6</version>
   <executions>
     <execution>
       <id>default-testResources</id>
       <phase>process-test-resources</phase>
       <goals>
         <goal>testResources</goal>
       </goals>
     </execution>
     <execution>
       <id>default-resources</id>
       <phase>process-resources</phase>
       <goals>
         <goal>resources</goal>
       </goals>
     </execution>
   </executions>
 </plugin>
 <plugin>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>3.1</version>
   <executions>
     <execution>
       <id>default-compile</id>
       <phase>compile</phase>
       <goals>
         <goal>compile</goal>
       </goals>
     </execution>
     <execution>
       <id>default-testCompile</id>
       <phase>test-compile</phase>
       <goals>
         <goal>testCompile</goal>
       </goals>
     </execution>
   </executions>
 </plugin>
  ...

자세한 내용은 Maven 설명서의 Maven 라이프사이클 소개에서 확인할 수 있습니다.

단, 다른 값을 기본값으로 설정하는 경우(예를 들어 사용하는 JDK 버전을 조정하기 위해 pom.xml에서 maven-compiler 플러그인을 선언했을 때) 또는 Maven 라이프 사이클에서 기본적으로 사용되지 않는 일부 플러그인 실행을 추가하는 경우 이러한 플러그인을 선언할 수 있습니다.

위의 솔루션 중 어느 것도 바로 효과가 없었습니다.그래서 저는 다음 단계를 따랐습니다.

  1. 가를 pom.xml:
<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>
  1. ★★★★★★★★★★★★★★★로 이동Project PropertiesJava Build Path 후, JRE를 가리키는 합니다.JRE1.5.

  2. Force가 프로젝트를 업데이트했습니다.

다음 단계는 매력적으로 작용합니다! 그래서 모두에게 공유하려고 합니다.

기본 프로젝트에서 작업하기 위해 pom.xml 파일에 추가한 행입니다.Java 12를 사용하고 있습니다(11, 10, 1.8 등 교환 가능).

<properties>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>12</release>
            </configuration>
        </plugin>
    </plugins>
</build>

POM 파일 변경 후 프로젝트를 새로고침하여 IDE가 플러그인을 다운로드/페치할 수 있도록 하십시오.(인텔리제 경우)IDEA: pom.xml 우클릭 -> maven -> Reload project)로 이동합니다.

IDE에서도 원하는 버전을 설정해 주세요.

인텔리J 아이디어 메이븐 빌드를 사용하고 있다면.

여기에 이미지 설명 입력

다른 방법을 생각해 보십시오.

<properties>
    <javac.src.version>1.8</javac.src.version>
    <javac.target.version>1.8</javac.target.version>
</properties>

그것은 같은 것이어야 한다maven.compiler.source/maven.compiler.target그러나 위의 솔루션은 나에게 효과가 있습니다.그렇지 않으면 두 번째 솔루션이 부모 사양이 됩니다(matrioska는 .pom입니다).

NetBeans IDE의 경우 프로젝트 속성 변경 - (Jersey Service) - [카테고리(Categories)]> [소스(Sources)]> [소스(Selected '소스/바이너리 포맷(Source/Binary Format)]를 1.8로 선택합니다.

언급URL : https://stackoverflow.com/questions/38882080/specifying-java-version-in-maven-differences-between-properties-and-compiler-p

반응형