JAXB API'leri Java EE API'leri olarak kabul edilir ve bu nedenle artık Java SE 9'daki varsayılan sınıfyolunda yer almazlar. Java 11'de, bunlar JDK'dan tamamen kaldırılır.
Java 9, modül kavramlarını tanıtır ve varsayılan olarak, java.se
toplu modül sınıfyolunda (veya daha doğrusu modül yolunda) bulunur. Adından da anlaşılacağı gibi, java.se
agrega modül yok değil geleneksel Java 6/7/8 ile birlikte olan Java EE API içermekte.
Neyse ki, JDK 6/7/8 içinde sağlanan bu Java EE API'leri hala JDK'dadır, ancak varsayılan olarak sınıf yolunda değildir. Ek Java EE API'leri aşağıdaki modüllerde sağlanır:
java.activation
java.corba
java.transaction
java.xml.bind << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation
Hızlı ve kirli çözüm: (yalnızca JDK 9/10)
JAXB API'lerini çalışma zamanında kullanılabilir hale getirmek için aşağıdaki komut satırı seçeneğini belirtin:
--add-modules java.xml.bind
Ama yine de Java 8 ile çalışmak için buna ihtiyacım var !!!
Daha --add-modules
eski bir JDK ile belirtmeyi denerseniz , tanınmayan bir seçenek olduğu için patlayacak. İki seçenekten birini öneririm:
JDK_JAVA_OPTIONS
Ortam değişkenini kullanarak yalnızca Java 9+ ve üstü seçeneklerini ayarlayabilirsiniz . Bu ortam değişkeni, Java 9+ için başlatıcı tarafından otomatik olarak okunurjava
.
-XX:+IgnoreUnrecognizedVMOptions
JVM'yi, havaya uçurmak yerine tanınmayan seçenekleri sessizce yok saymak için ekleyebilirsiniz . Ama dikkat et! Kullandığınız diğer komut satırı bağımsız değişkenleri artık sizin için JVM tarafından doğrulanmayacak. Bu seçenek, Oracle / OpenJDK ve IBM JDK (JDK 8sr4'ten itibaren) ile çalışır.
Alternatif hızlı çözüm: (yalnızca JDK 9/10)
--add-modules java.se.ee
Seçeneği belirterek, yukarıdaki Java EE modüllerinin tümünü çalışma zamanında kullanabileceğinizi unutmayın . java.se.ee
Modül içeren bir toplam modülüdür java.se.ee
yanı sıra yukarıda Java EE API modülleri. Not Bu Java 11 çalışmıyor çünkü java.se.ee
Java 11'de çıkarıldı.
Uygun uzun vadeli çözüm: (JDK 9 ve üstü)
Yukarıda listelenen Java EE API modüllerinin tümü , Java 11'de kaldırılmak@Deprecated(forRemoval=true)
üzere zamanlandıkları için işaretlenir . Dolayısıyla yaklaşım artık Java 11'de kullanıma hazır olmayacak.--add-module
Java 11 ve sonraki sürümlerinde yapmanız gereken şey, sınıf yolundaki veya modül yolundaki Java EE API'lerinin kendi kopyasını içermektir. Örneğin, JAX-B API'lerini aşağıdaki gibi bir Maven bağımlılığı olarak ekleyebilirsiniz:
<!-- API, java.xml.bind module -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<!-- Runtime, com.sun.xml.bind module -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
JAXB hakkında daha fazla bilgi için JAXB Başvuru Uygulaması sayfasına bakın.
Java modülerliği hakkında tüm ayrıntılar için, bkz. JEP 261: Modül Sistemi
Gradle veya Android Studio geliştiricisi için: (JDK 9 ve üstü)
build.gradle
Dosyanıza aşağıdaki bağımlılıkları ekleyin :
dependencies {
// JAX-B dependencies for JDK 9+
implementation "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
implementation "org.glassfish.jaxb:jaxb-runtime:2.3.2"
}