Eclipse Transformerのご紹介と、javaxパッケージ名前空間からjakartaパッケージ名前空間への変換例(Part 1)
富士通技術者ブログ~Javaミドルウェア~

2023年2月10日 初版
岡田 崚佑

2022年9月末に Jakarta EE 10がリリースされました。Jakarta EE 10は、Java EEがOracleからEclipseに移管されてから初の本格的なメジャーアップデートとなります。
Jakarta EE 8以前から Jakarta EE 10へ移行する際に注意すべき重要な点の一つとして、名前空間の変更があります。
Jakarta EE 8以前では、javaxで始まる名前空間がパッケージ名やスキーマ名に使われていましたが Jakarta EE 9以降では名前空間がjavaxからjakartaに変更されました。
そのため、Jakarta EE 8以前のアプリケーションをJakarta EE 10で使用するには、アプリケーション内で参照しているすべてのJakarta EE APIをjakartaパッケージ名前空間にもれなく変更しなければなりません。
この変更は膨大な作業となりますが、作業支援ツールがいくつか用意されており、これらのツールを使うことで作業負荷の軽減が可能となります。
本投稿では、ツールの一つとしてJakarta EEと同じくEclipse Foundation内で開発されている、Eclipse Transformerを紹介します。

なお、本記事の内容は、FUJITSU Software Enterprise Application Platform に適用することができます。

Eclipse Transformerとは

Eclipse Transformerは、Java関連ファイルに含まれる各種リソース名を変換するツールです。ツールは任意のリソース名を変換することが可能ですが、本稿では、javaxからjakartaへの変換にフォーカスして、紹介します。

対象となるJava関連ファイルは、以下になります。

  • Javaクラスファイル
  • OSGIマニフェストファイル
  • プロパティファイル
  • サービスローダー設定ファイル
  • Javaソース、XML、TLD、HTML、JSP

また、以下に含まれるJava関連ファイルをまとめて変換対象にすることができます。

  • ディレクトリ
  • Javaアーカイブ(JAR、WAR、RAR、EAR)
  • ZIPアーカイブ

Eclipse Tranformerの詳細については、以下を参照ください。

Eclipse Transformerの入手と準備

Eclipse Transformerは、以下より入手してください。

注:本稿では、執筆時点での最新版である、バージョン0.5.0を使用します。
その他のバージョンについては、以下からダウンロード可能です。

ダウンロードしたorg.eclipse.transformer.cli-0.5.0-distribution.jarを任意のディレクトリにコピーし、jarコマンドで展開します。
本稿では、「trans」というディレクトリに展開する例を示します。

$ mkdir trans
$ cd trans
$ jar xf ../org.eclipse.transformer.cli-0.5.0-distribution.jar
$ cd ..
  • その他にもいくつかのバージョンがありますが、現時点で最新版の0.5.0を使用することをお勧めします。

Eclipse Transformerの使用方法

Eclipse Transformerの起動は、以下のように行います。

java -jar org.eclipse.transformer.cli-0.5.0.jar {入力ファイル} [出力ファイル]

{入力ファイル}には、変換対象となるファイル、すなわち、javaxの名前を含むファイル、ディレクトリ、jarアーカイブなどを指定します。
[出力ファイル] を指定しなかった場合は、デフォルトで、output_{入力ファイル名}となります。
次に、Eclipse Transfomerが、具体的にどのように変換するのか、以下に二つの例を紹介します。

例1: javaソースファイルの変換


変換前

package com.example;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/api")
public class SampleApplication extends Application {
}

変更後

package com.example;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;

@ApplicationPath("/api")
public class SampleApplication extends Application {
}

この例では、import文に、javax.ws.rsパッケージ名のクラスを指定していますが、Eclipse Transformerにより、jakarta.ws.rsパッケージ名に変換されていることが分かります。

例2:XMLファイルの変換


変換前

<?xml version='1.0' encoding='UTF-8'?>
<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
</web-app>

変換後

<?xml version='1.0' encoding='UTF-8'?>
<web-app version="5.0"
         xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd">

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
</web-app>

この例では、スキーマ定義、サーブレットクラスに、それぞれJava EEの定義、クラス名が指定されていますが、Eclipse Transformerにより、Jakarta EEのスキーマ定義、クラス名に変換されています。

最後に

本投稿では、Jakarta EE 8以前で使用されていたjavaxパッケージ名前空間を、Jakarta EE 10以降で使用されるjakartaパッケージ名前空間に変換する、Eclipse Transformerについて、 その使い方を説明しました。
Eclipse Transformerプロジェクトには、富士通のエンジニアもコミッターとして参加しており、品質向上に努めています。既存のアプリケーションをjakartaパッケージ名前空間に移行する際には、ぜひお試しください。

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

富士通コンタクトライン(総合窓口)

0120-933-200

受付時間:9時~12時および13時~17時30分
(土曜日・日曜日・祝日・当社指定の休業日を除く)

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ