Java 9 Java EE APIを含む6つのモジュールを非推奨 そしてそれらは 削除される予定 間もなく:
javax.activation
パッケージ付きjavax.activity
、javax.rmi
、javax.rmi.CORBA
、およびorg.omg.*
パッケージjavax.transaction
パッケージ付きjavax.xml.bind.*
パッケージを含むjavax.jws
、javax.jws.soap
、javax.xml.soap
、およびすべてのjavax.xml.ws.*
パッケージjavax.annotation
パッケージこれらのAPIを提供しているのは、維持されているサードパーティのアーティファクトのどれですか?それらがそれらのAPIをどの程度うまく提供しているか、あるいは他にどのような機能を提供しなければならないかは問題ではありません。
知識の収集を容易にするために、私はこれまでに知っていたことと答え、その答えをコミュニティWikiにしました。私は人々が彼ら自身の答えを書く代わりにそれを拡張することを願っています。
投票する前に閉じる
非推奨のJava EEモジュールを使用する代わりに、以下の成果物を使用してください。
JavaBeans Activation Frameworkはスタンドアロンのテクノロジです(Maven Centralで入手可能)。
<dependency>
<groupId>com.Sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
( ソース )
JEP 320 から:
サードパーティがCORBA API、ORB実装、CosNamingプロバイダなどのメンテナンスを引き継がない限り、CORBAのスタンドアロンバージョンはありません。JavaSEプラットフォームは独立したCORBAの実装を推奨しているため、サードパーティのメンテナンスが可能です。対照的に、RMI-IIOP用のAPIは、Java SE内でのみ定義および実装されています。専用のJSRが保守を開始しない限り、またはEclipse FoundationがAPIの管理を引き継がない限り、RMI-IIOPのスタンドアロン版はありません(JCPからEclipse FoundationへのJava EEの管理の移行には、 GlassFish およびそのCORBAとRMI-IIOPの実装)。
スタンドアローン版:
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
( Source ;クラスとモジュールパスで1.2
と今後の1.3
の使い方を調べてください。)
リファレンス実装:
<!-- Java 6 = JAXB version 2.0 -->
<!-- Java 7 = JAXB version 2.2.3 -->
<!-- Java 8 = JAXB version 2.2.8 -->
<!-- Java 9 = JAXB version 2.3.0 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.Sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.Sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.8</version>
</dependency>
( Source ; JEP 320 はschemagen
とxjc
をどこから取得するかを説明しています。)
リファレンス実装:
<dependency>
<groupId>com.Sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.0</version>
<type>pom</type>
</dependency>
( Source ; wsgen
とwsimport
をどこから取得するかについても説明しています。)
Java Commons Annotations (Maven Centralで入手可能):
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
( ソース )
JDK9用のJAXB(Java.xml.bind)
私のデスクトップアプリケーションで完璧に動くjdk9/10 EA
<properties>
<jaxb-api.version>2.3.0</jaxb-api.version>
</properties>
<!-- JAXB 2.3.0 for jdk9+ -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<!-- JAXB needs javax.activation module (jdk9) -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
Jaxws-riはcommonj.sdo:commonj.sdo:jar:2.1.1.v201112051852から推移的に依存しているようです。これは明らかにrepository http://download.Eclipse.org/rt/eclipselink/mavenから見つけることができます。レポ
Spring Boot 2ベースのアプリケーションのJAX-WS(Java.xml.ws)とJAXB(Java.xml.bind)を置き換える必要があり、これらのJAR(Gradleビルド)になりました。
// replacements for deprecated JDK module Java.xml.ws
runtimeOnly 'javax.xml.ws:jaxws-api:2.3.0' // javax.xml.ws.* classes
runtimeOnly 'javax.jws:jsr181-api:1.0-MR1' // for javax.jws.* classes
// replacement for deprecated JDK module Java.xml.bind
runtimeOnly 'javax.xml.bind:jaxb-api'
runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:2.3.0.1'
runtimeOnly 'org.glassfish:javax.json:1.1.2'
runtimeOnly 'org.Eclipse:yasson:1.0.1'
(compile
または他のスコープが必要な場合があります。runtimeOnly
で十分です。)
https://mvnrepository.com/artifact/com.Sun.xml.bind/jaxb-core が「古い」と記述されており、 this answer が使用されていることに気付きましたorg.glassfish
に基づいてorg.Eclipse.yasson
をもたらしたもの。
今では本当に厄介な状況ですが、動作しますが、最高の代替品であると誰がどのように確信すべきでしょうか?
上記の答えのほんの少しの変化(改善)---ここではJAXBのためだけに例示されています。 runtime
スコープで依存性を追加することができます。これが効果的に必要な場合に限ります(つまりバージョン9以上のJREで実行するためにビルドする場合 - ここではv11が例示されます)。
<profile>
<id>when-on-jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<!-- missing artefacts version properties -->
<jaxb-api.version>2.3.1</jaxb-api.version>
<jaxb-impl.version>2.3.2</jaxb-impl.version> <!-- one might let it the same with the jaxb-api.version -->
</properties>
<dependencies>
<!-- runtime dependencies to avoid JAXB related CNF exceptions when running on Java 11 (e.g.: ClassNotFoundException: javax.xml.bind.annotation.XmlType) -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb-impl.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
私はJDK 11.0.3を使って上記の提案の大部分を試してみましたが成功しませんでした。私が最終的にうまくいくことがわかった唯一の解決策は以下です。他にも機能するオプションがあるかもしれませんが、バージョンの選択が重要であると思われます。たとえば、com.Sun.xml.ws:rtを2.3.2に変更すると、モジュールjavax.jwsは使用できなくなります。
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>
<dependency>
<groupId>com.Sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.3.1</version>
</dependency>
これらの問題のJAXB部分を回避する最も簡単な方法は、私のroot pomまたはbomで依存関係管理を使用することです。
<project ...>
<dependencyManagement>
<dependencies>
<!-- ... -->
<!-- Gone from jvm in Java11 -->
<dependency>
<groupId>com.Sun.xml.bind</groupId>
<artifactId>jaxb-ri</artifactId>
<version>2.4.0-b180830.0438</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- ... -->
</dependencies>
</dependencyManagement>
</project>
そしてjdk11でコンパイルに失敗したモジュールでは、
<!-- ... -->
<dependencies>
<!-- Gone from jvm in Java11 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>com.Sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<scope>runtime</scope>
</dependency>
<!-- ... -->
</dependencies>
<!-- ... -->
また、org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
のバージョンを0.14.0に更新することは私にとってのすべてのjaxb生成問題を解決しました。