web-dev-qa-db-ja.com

廃止予定のJPMSモジュールのJava EE APIへの置き換え

Java 9 Java EE APIを含む6つのモジュールを非推奨 そしてそれらは 削除される予定 間もなく:

  • Java.activation javax.activationパッケージ付き
  • Java.corba javax.activityjavax.rmijavax.rmi.CORBA、およびorg.omg.*パッケージ
  • Java.transaction javax.transactionパッケージ付き
  • Java.xml.bind すべてのjavax.xml.bind.*パッケージを含む
  • Java.xml.ws javax.jwsjavax.jws.soapjavax.xml.soap、およびすべてのjavax.xml.ws.*パッケージ
  • Java.xml.ws.annotation with javax.annotationパッケージ

これらのAPIを提供しているのは、維持されているサードパーティのアーティファクトのどれですか?それらがそれらのAPIをどの程度うまく提供しているか、あるいは他にどのような機能を提供しなければならないかは問題ではありません。

知識の収集を容易にするために、私はこれまでに知っていたことと答え、その答えをコミュニティWikiにしました。私は人々が彼ら自身の答えを書く代わりにそれを拡張することを願っています。


投票する前に閉じる

  • はい、すでに個々のモジュールに関するいくつかの質問があり、この質問に対する答えはもちろんその情報を複製するでしょう。しかし、私の知る限りでは、これらのすべてについて学ぶべき単一のポイントはありません。これには多くの価値があります。
  • 図書館の推薦を求める質問は通常「トピック外の回答やスパムをひきつける傾向がある」ため、トピック外と見なされますが、ここでは当てはまりません。有効なライブラリのセットは明確に説明されています。それらは特定の標準を実装する必要があります。それ以外には何も問題ないので、私は意見やスパムのリスクがあまりないと思います。
120
Nicolai

非推奨のJava EEモジュールを使用する代わりに、以下の成果物を使用してください。

JAF( Java.activation

JavaBeans Activation Frameworkはスタンドアロンのテクノロジです(Maven Centralで入手可能)。

<dependency>
    <groupId>com.Sun.activation</groupId>
    <artifactId>javax.activation</artifactId>
    <version>1.2.0</version>
</dependency>

ソース

CORBA( Java.corba

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の実装)。

JTA( Java.transaction

スタンドアローン版:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
</dependency>

Source ;クラスとモジュールパスで1.2と今後の1.3の使い方を調べてください。)

JAXB( Java.xml.bind

リファレンス実装:

<!-- 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 320schemagenxjcをどこから取得するかを説明しています。)

JAX-WS( Java.xml.ws

リファレンス実装:

<dependency>
    <groupId>com.Sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.3.0</version>
    <type>pom</type>
</dependency>

Source ; wsgenwsimportをどこから取得するかについても説明しています。)

共通アノテーション( Java.xml.ws.annotation

Java Commons Annotations (Maven Centralで入手可能):

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.1</version>
</dependency>

ソース

134
Nicolai

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>
19
bourgesl

Jaxws-riはcommonj.sdo:commonj.sdo:jar:2.1.1.v201112051852から推移的に依存しているようです。これは明らかにrepository http://download.Eclipse.org/rt/eclipselink/mavenから見つけることができます。レポ

8
theNikki1

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をもたらしたもの。

今では本当に厄介な状況ですが、動作しますが、最高の代替品であると誰がどのように確信すべきでしょうか?

8
virgo47

上記の答えのほんの少しの変化(改善)---ここでは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>
1
paul-emil

私は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> 
0
Des Albert

これらの問題の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生成問題を解決しました。

0
George