JDK sürümü nasıl belirlenir?
1) <java.version>
Maven belgelerinde referans verilmemiştir.
Bir Spring Boot özgüllüğüdür.
Her ikisi için de java 1.8'i belirtmek için kaynak ve hedef java sürümünü aynı sürümle ayarlamanıza izin verir:
<properties>
<java.version>1.8</java.version>
</properties>
Spring Boot kullanıyorsanız onu kullanmaktan çekinmeyin.
2) kullanılarak maven-compiler-plugin
ya da maven.compiler.source
/ maven.compiler.target
özelliklerini belirlemek için source
ve target
eşdeğerdir.
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
ve
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
göre eşdeğer derleyici eklentinin Maven'in belgeleri
yana <source>
ve <target>
özellikleri derleyici yapılandırma Kullanılan elemanlar maven.compiler.source
ve maven.compiler.target
tanımlandıkları ise.
kaynak
-source
Java derleyicisi için argüman.
Varsayılan değer: 1.6
.
Kullanıcı özelliktir: maven.compiler.source
.
hedef
-target
Java derleyicisi için argüman.
Varsayılan değer: 1.6
.
Kullanıcı özelliktir: maven.compiler.target
.
Varsayılan değerleri hakkında source
ve target
not o
yana 3.8.0
maven derleyici varsayılan değerler elde değişmiş 1.5
için1.6
.
3) maven-compiler-plugin 3.6
ve sonraki sürümler yeni bir yol sağlar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>9</release>
</configuration>
</plugin>
Ayrıca şunları da beyan edebilirsiniz:
<properties>
<maven.compiler.release>9</maven.compiler.release>
</properties>
Ancak şu anda, maven-compiler-plugin
kullandığınız varsayılan sürüm yeterince yeni bir sürüme bağlı olmadığından çalışmaz.
Maven release
argümanı release
şunları sunar: Java 9'dan geçebileceğimiz yeni bir JVM standart seçeneği :
Belirli bir VM sürümü için genel, desteklenen ve belgelenmiş API'lara karşı derler.
Bu şekilde source
, target
ve bootstrap
JVM seçenekleri için aynı sürümü belirtmek için standart bir yol sağlanır .
Belirtmek, bootstrap
çapraz derlemeler için iyi bir uygulamadır ve çapraz derlemeler yapmazsanız zarar görmeyecektir.
JDK sürümünü belirtmenin en iyi yolu hangisidir?
İlk yola ( <java.version>
) yalnızca Spring Boot kullanıyorsanız izin verilir.
Java 8 ve altı için:
Diğer iki yol hakkında: maven.compiler.source
/ maven.compiler.target
özelliklerine değer vermek veya öğesini kullanarak, maven-compiler-plugin
birini veya diğerini kullanabilirsiniz. Sonunda iki çözüm aynı özelliklere ve aynı mekanizmaya bağlı olduğu için gerçeklerde hiçbir şey değişmez: maven çekirdek derleyici eklentisi.
Derleyici eklentisindeki Java sürümlerinden başka özellikler veya davranışlar belirtmeniz gerekmiyorsa, bu şekilde kullanmak daha mantıklı olduğu için daha mantıklıdır:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Java 9'dan:
Bağımsız release
değişken (üçüncü nokta), kaynak ve hedef için aynı sürümü kullanmak isteyip istemediğinizi dikkate almanın bir yoludur.
Sürüm JAVA_HOME içindeki JDK ile pom.xml dosyasında belirtilen sürüm arasında farklılık gösterirse ne olur?
Tarafından başvurulan JAVA_HOME
JDK'nın pom'da belirtilen sürümle uyumlu olması sorun değildir , ancak daha iyi bir çapraz derleme uyumluluğu sağlamak için sürümün bootstrap
yolunu değer olarak JVM seçeneğini eklemeyi düşünün . rt.jar
target
Dikkate alınması gereken önemli bir nokta da source
ve target
Maven yapılandırmasındaki sürümün JAVA_HOME
.
JDK'nın eski bir sürümü, özelliklerini bilmediği için daha yeni bir sürümle derlenemez.
Kullanılan JDK'ya göre kaynak, hedef ve sürüm desteklenen sürümleri hakkında bilgi almak için lütfen java derlemesine bakın : kaynak, hedef ve sürüm desteklenen sürümleri .
JAVA_HOME tarafından başvurulan JDK örneğinin, pom'da belirtilen java hedefi ve / veya kaynak sürümleri ile nasıl uyumlu olmadığı nasıl ele alınır?
Örneğin, JAVA_HOME
bir JDK 1.7'ye atıfta bulunur ve pom.xml'inizin derleyici yapılandırmasında kaynak ve hedef olarak bir JDK 1.8 belirtirseniz, bu bir sorun olacaktır, çünkü açıklandığı gibi JDK 1.7 nasıl derleneceğini bilmiyor .
Kendi bakış açısına göre, bilinmeyen bir JDK sürümüdür.
Bu durumda, Maven derleyici eklentisini JDK'yı şu şekilde belirtecek şekilde yapılandırmalısınız:
<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 derleyici eklentisi ile örneklerde daha fazla ayrıntıya sahip olabilirsiniz .
Sorulmuyor ancak bunun daha karmaşık olabileceği durumlar, kaynağı belirlediğiniz, ancak hedeflemediğiniz zaman. Kaynak sürüme göre hedefte farklı bir sürüm kullanabilir. Kurallar özeldir: Bunlar hakkında Çapraz Derleme Seçenekleri bölümünde okuyabilirsiniz .
Derleyici eklentisi, package
pom.xml dosyasında belirtmeseniz bile Maven hedefinin yürütülmesinde çıkışta izleniyor?
Kodunuzu derlemek ve daha genel olarak maven hedefi için gerekli tüm görevleri yerine getirmek için Maven'in araçlara ihtiyacı vardır. Bu nedenle, gerekli görevleri yapmak için çekirdek Maven eklentilerini kullanır (temel bir Maven eklentisini tanırsınız:) groupId
: org.apache.maven.plugins
sınıfları derlemek için derleyici eklentisi, testleri yürütmek için test eklentisi vb. Bu eklentileri beyan ettiklerinde, Maven yaşam döngüsünün yürütülmesine bağlılar.
Maven projenizin kök dizininde şu komutu çalıştırabilirsiniz: mvn help:effective-pom
son pom'ı etkili bir şekilde kullanmak için. Maven tarafından eklenen eklentileri (pom.xml'nizde belirtilmiş veya edilmemiş), kullanılan sürümle, bunların yapılandırmasıyla ve yaşam döngüsünün her aşaması için yürütülen hedeflerle görebilirsiniz.
mvn help:effective-pom
Komutun çıktısında , öğedeki bu çekirdek eklentilerin bildirimini görebilirsiniz, <build><plugins>
örneğin:
...
<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 belgelerinde Maven cankurtaranının tanıtımında bu konuda daha fazla bilgi edinebilirsiniz .
Bununla birlikte, bu eklentileri varsayılan değer olarak diğer değerlerle yapılandırmak istediğinizde bildirebilirsiniz (örneğin, JDK sürümünü kullanmak için pom.xml'nizdeki maven-derleyici eklentisini bildirdiğinizde) veya Maven yaşam döngüsünde varsayılan olarak kullanılmayan bazı eklenti yürütmeleri eklemek istiyorum.
<maven.compiler.x>
özelliğe yapışacaktır .