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.8<java.version>메이븐을 만나다
스프링 부트 사양입니다.
및 1할 수 .Java 1.8은 Java 1.8로 합니다.
Spring Boot을 사용하시는 분은 부담없이 사용하세요.
maven-compiler-pluginsource&target
- 「」를 사용합니다.
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
maven-compiler-plugin
org.apache.maven.org.maven.maven.. maven-maven-3.09 플러그인 maven-maven-3.8.093.6은 새로운 이후음음음음음음음음음음음음음음음 and and and and and and and and and and and and.
다음과 같이 선언할 수도 있습니다.
<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 , . . . . . . . .target 및bootstrapJVM 션 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전입니니다다
서 중요한 은 '우리'는 '우리'는 '우리'는 '우리'는 '우리'와 ''는 '우리'는'source 및target은 Maven이 수 .JAVA_HOME.
이전 버전의 JDK는 사양을 모르기 때문에 최신 버전으로 컴파일할 수 없습니다.
사용된 JDK에 따라 소스, 타깃 및 릴리즈 지원 버전에 대한 자세한 내용은 Java 컴파일: source, target 및 release 지원 버전을 참조하십시오.
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 라이프 사이클에서 기본적으로 사용되지 않는 일부 플러그인 실행을 추가하는 경우 이러한 플러그인을 선언할 수 있습니다.
위의 솔루션 중 어느 것도 바로 효과가 없었습니다.그래서 저는 다음 단계를 따랐습니다.
- 가를
pom.xml:
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
★★★★★★★★★★★★★★★로 이동
Project PropertiesJava Build Path후, JRE를 가리키는 합니다.JRE1.5.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
'programing' 카테고리의 다른 글
| Vuejs에서 vuex Store로 데이터를 전달하는 방법 (0) | 2022.05.31 |
|---|---|
| Larabel 5 - 조건부로 변수 추가 (0) | 2022.05.31 |
| Vue js - 이미지 소스를 찾을 수 없을 때 alt 이미지 설정 (0) | 2022.05.31 |
| Java 8 JDK를 사용하여 Itable을 스트림으로 변환 (0) | 2022.05.31 |
| Vue Router가 항상 브라우저를 새로고침 - vuex-state 손실 (0) | 2022.05.31 |
