Java 9 以降
PreEmptive Protection - DashO は Java 9 と Java 10 で使用することができますが、以下に示すように制限があります。
DashO による Java 9(以降のバージョン)のサポートは、リリースごとに改善されていきます。 詳細については、弊社のブログ投稿をご覧ください。
サポート
DashO は Java 9 または Java 10 で実行できます
が、Append current Java runtime
(最新の Java ランタイムの追加)設定は使用できません。
代わりに、include the JDK(JDK の導入)を使用してください。
Java 9 または Java 10 のクラス ファイルが含まれているサポート ライブラリと入力は処理されます。
ただし、サポート ライブラリ内の module-info.class
ファイルはクラス参照やモジュール間の依存関係があるかどうかについて評価されず、入力としてのモジュールのサポートが制限されます。
制限事項
現在、DashO で Java 9 および Java 10 の機能を処理する方法にはいくつかの制限があります。 これらの制限は今後の DashO のバージョンで解消されます。
モジュール
Java 9 から導入された Java モジュールは、DashO ではモジュールとして解釈されません。標準の jar ファイルとして扱われます。
DashO は module-info.class
内の情報を更新しませんし、使用もしません。
モジュールを入力として処理する場合は、次のようにします。
module-info
によって参照されるクラスおよびパッケージは、削除も名前の変更もされないように DashO を構成します。- Auto copy を有効にして、
module-info.class
が出力にコピーされるようにします。 - 名前の変更で、パッケージをフラット化するように構成する場合は、パッケージのプレフィックスを使用します。
- モジュールのパッケージをフラット化する場合は、プレフィックス付きパッケージが複数のモジュールに存在しないよう、入力はこのモジュールのみとする必要があります。
これらの制限があるため、Java モジュールのサポートは既定では無効になっており、意図しない、予期しないビルド結果にならないようにしています。
Java モジュールを入力として処理するには、PROVISIONAL_MODULE_SUPPORT
という名前の新しいユーザー プロパティを追加し、それを true
に設定することにより、オプトインします。
メモ:サポートが条件付きでなくなれば、このプロパティは無視されます。
文字列の暗号化
invokedynamic
ベースの文字列連結(詳細は JEP-280 を参照)は、Java 9 から導入されたもので、文字列定数をブートストラップ メソッドに渡すことができます。
これは現在、DashO の文字列の暗号化ではサポートされていません。
定数でない値と連結された定数文字列(例:"Welcome, " + name + ", to string concatenation."
)は、既定では暗号化されません。
この問題が発生した場合は、DashO により、ビルドあたり一度だけ、警告が発行されます。
この問題は、Java 9(以降)JVM 上で実行される Java 8(以前)用にコンパイルされたクラスには影響しません。
JEP-280 の説明に従い、-XDstringConcat=indy
を指定してコンパイルすると、DashO の文字列の暗号化は Java 8 以前と同様に動作するようになります。
ビルド統合
古い Gradle の統合は、Java 9 以降で実行すると、警告(WARNING: An illegal reflective access operation...
(警告:無効なリフレクション アクセス操作...))が出力されます。
これらの警告は無視してかまいません。
マルチ リリース Jar ファイル
DashO は、マルチ リリース jar ファイルが入力として構成されている場合、ビルド エラーを生成します。
メモ:サポート ライブラリとして使用されている場合は、
Duplicate class
警告が表示されますが、この警告は無視できます。