Java17で使用する場合のセットアップ方法¶
ブランクプロジェクトをJava17で使用する場合、各ブランクプロジェクトの疎通確認前に以下の手順を行う。
- 依存モジュールの追加
- gsp-dba-maven-pluginがJava17で動くように設定する
- 自動テストで使用するJettyのモジュール変更(ウェブプロジェクト または RESTfulウェブサービスプロジェクトの場合のみ)
- –add-opensオプションの追加(JSR352に準拠したバッチプロジェクトの場合のみ)
- Javaバージョンの変更
依存モジュールの追加¶
Java 11で、JAXBなど一部のモジュールが標準ライブラリから削除された。 削除されたモジュールは明示的に依存関係に追加する必要がある。 このため、作成したブランクプロジェクトのPOMに以下のモジュールを追加する。
なお、 Java 11 の依存モジュールの追加 とは、以下2点の違いがある。
jaxb-impl
のバージョンに2.3.5
を指定する- Java 17 で強化されたカプセル化への対応が、このバージョンでは入っているため
jaxb-api
のアーティファクトを外すjaxb-impl
の2.3.5
が、jakarta.xml.bind-api
という別のアーティファクトを推移的に使用するため
<dependencies>
<!-- 中略 -->
<!-- 以下を追加する。 -->
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
自動テストで使用するJettyのモジュール変更(ウェブプロジェクト または RESTfulウェブサービスプロジェクトの場合のみ)¶
ブランクプロジェクトのデフォルトで設定されているJettyのバージョンはJava17に対応していない。 そのため以下のように2ファイルを変更する。
- pom.xml
<!-- nablarch-testing-jetty6の箇所を以下のように変更する -->
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-testing-jetty9</artifactId>
<scope>test</scope>
</dependency>
- src/test/resources/unit-test.xml
<!-- HttpServerFactoryJetty6の箇所を以下のように変更する -->
<component name="httpServerFactory" class="nablarch.fw.web.httpserver.HttpServerFactoryJetty9"/>
–add-opensオプションの追加(JSR352に準拠したバッチプロジェクトの場合のみ)¶
Java 17でカプセル化が強化され、デフォルトでは標準APIなど内部APIをリフレクションで使用できなくなった。 この変更に対する正規の対応は、代替APIへの移行となる。しかし、JSR352に準拠したバッチプロジェクトで使用しているJSR352の実装であるjBeretにはこの対応が入っていない。
このため、Java 17でもJSR352に準拠したバッチプロジェクトを動かすためには、以下のJVMオプションを設定して内部APIをリフレクションで使用できるようにする必要がある。
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.security=ALL-UNNAMED
以下に、オプションを指定した場合のコマンドの例を記載する。
> java --add-opens java.base/java.lang=ALL-UNNAMED ^
--add-opens java.base/java.security=ALL-UNNAMED ^
-jar target\myapp-batch-ee-0.1.0\myapp-batch-ee-0.1.0.jar ^
sample-batchlet
補足
Mavenから実行する場合は、環境変数 MAVEN_OPTS (外部サイト) を使うことでJVMオプションを設定できる。
Javaバージョンの変更¶
ブランクプロジェクトではソース及びclassファイルが準拠するJavaのバージョンとしてJava8が設定されているため 以下のようにファイルを変更する。
- pom.xml
<!-- Javaバージョンの箇所を以下のように変更する-->
<java.version>17</java.version>