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-pluginya da maven.compiler.source/ maven.compiler.targetözelliklerini belirlemek için sourceve targeteş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.sourceve maven.compiler.targettanımlandıkları ise.
kaynak
-sourceJava derleyicisi için argüman.
Varsayılan değer: 1.6.
Kullanıcı özelliktir: maven.compiler.source.
hedef
-targetJava derleyicisi için argüman.
Varsayılan değer: 1.6.
Kullanıcı özelliktir: maven.compiler.target.
Varsayılan değerleri hakkında sourceve targetnot o
yana 3.8.0maven derleyici varsayılan değerler elde değişmiş 1.5için1.6 .
3) maven-compiler-plugin 3.6ve 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 releaseargü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, targetve bootstrapJVM 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-pluginbirini 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 releasedeğ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_HOMEJDK'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 bootstrapyolunu değer olarak JVM seçeneğini eklemeyi düşünün . rt.jartarget
Dikkate alınması gereken önemli bir nokta da sourceve targetMaven 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_HOMEbir 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, packagepom.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.pluginssı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-pomson 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-pomKomutun çı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 .