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.setoplu modül sınıfyolunda (veya daha doğrusu modül yolunda) bulunur. Adından da anlaşılacağı gibi, java.seagrega 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-moduleseski bir JDK ile belirtmeyi denerseniz , tanınmayan bir seçenek olduğu için patlayacak. İki seçenekten birini öneririm:
JDK_JAVA_OPTIONSOrtam 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:+IgnoreUnrecognizedVMOptionsJVM'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.eeSeçeneği belirterek, yukarıdaki Java EE modüllerinin tümünü çalışma zamanında kullanabileceğinizi unutmayın . java.se.eeModül içeren bir toplam modülüdür java.se.eeyanı sıra yukarıda Java EE API modülleri. Not Bu Java 11 çalışmıyor çünkü java.se.eeJava 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.gradleDosyanı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"
}