コンパイルするJavaバージョン毎の差異を吸収するための、コメント化(文字列置換)、ファイル名変換コピーを行うプラグインです。
Mavenのpom.xmlに以下の記載を追加する。
<plugins>
・・・
<plugin>
<groupId>com.github.nimbus-org</groupId>
<artifactId>nimbus-javaversion-filecontrol-maven-plugin</artifactId>
<version>X.X</version>
<configuration>
・・・
</configuration>
</plugin>
・・・
</plugins>
設定キー | 説明 | 必須 | デフォルト値 | 設定例 |
---|---|---|---|---|
javaVersion | コンパイルに使用するJavaのバージョン | System.getProperty("java.specification.version")で取得できるJavaバージョン | 8 | |
checkJavaVersions | 置換チェックするJavaのバージョン | 6,7,8,9 | 6,7,8,9 (※1) | |
fromDir | 置換元ファイルルートディレクトリ | ○ | 無し | ${basedir}/src/main/java |
toDir | 置換後ファイルコピー先ルートディレクトリ | ○ | 無し | ${basedir}/target/gen-src |
replaceTargetDirs | 置換元ファイルディレクトリ | ○ | 無し | jp/ossc/nimbus/** (※1) |
fromFileExtention | 置換対象ファイル拡張子 | ○ | 無し | javapp |
toFileExtention | 置換後ファイル拡張子 | java | java | |
encoding | ファイルの読み込み書き込みEncoding | システムのデフォルトエンコーディング | UTF-8 |
※1 複数指定が可能なため、<param>XXXX</param>
で複数記載する。
- Java8でコンパイル
- Java6,7,8,9をチェック
- /src/main/java 配下のソースが置換対象
- /target/gen-src に置換後ファイルを配置
- jp/ossc/nimbus/** にある(パッケージである)ソースが置換対象
- javappが置換対象ファイル拡張子
- 置換後のファイル拡張子はjava
- ソースファイルのエンコーディングはUTF-8
<plugins>
・・・
<plugin>
<groupId>com.github.nimbus-org</groupId>
<artifactId>commentout-by-javaversion-maven-plugin</artifactId>
<executions>
<execution>
<id>replace</id>
<phase>generate-sources</phase>
<goals>
<goal>replace</goal>
</goals>
<configuration>
<javaVersion>8</javaVersion>
<fromDir>${basedir}/src/main/java</fromDir>
<toDir>${basedir}/target/gen-src</toDir>
<fromFileExtention>javapp</fromFileExtention>
<toFileExtention>java</toFileExtention>
<encoding>UTF-8</encoding>
<checkJavaVersions>
<param>6</param>
<param>7</param>
<param>8</param>
<param>9</param>
</checkJavaVersions>
<replaceTargetDirs>
<param>jp/ossc/nimbus/**</param>
</replaceTargetDirs>
</configuration>
</execution>
</executions>
</plugin>
</plugin>
・・・
</plugins>
ルールに従った文字列を記載することで、コメントアウトのON/OFFを行う
説明 | 設定文字列ルール | 設定例 |
---|---|---|
コメント開始 | "@START" + "条件" + "JAVA" + "バージョン" + "@" | @START=JAVA9@ |
コメント終了 | "@END" + "条件" + "JAVA" + "バージョン" + "@" | @END=JAVA9@ |
条件文字列 | 説明 | 設定例 | 設定例説明 |
---|---|---|---|
= | 対象のJavaバージョンと等しい場合に有効となる | @START=JAVA9@ ~~~ @END=JAVA9@ | Java9でコンパイルする場合にのみ有効となる |
> | 対象のJavaバージョンより大きい場合に有効となる | @START>JAVA7@ ~~~ @END>JAVA7@ | Java7より大きいバージョンでコンパイルする場合にのみ有効となる |
>= | 対象のJavaバージョン以上の場合に有効となる | @START>=JAVA8@ ~~~ @END>=JAVA8@ | Java8以上のバージョンでコンパイルする場合にのみ有効となる |
< | 対象のJavaバージョンより小さい場合に有効となる | @START<JAVA7@ ~~~ @END<JAVA7@ | Java7より小さいバージョンでコンパイルする場合にのみ有効となる |
<= | 対象のJavaバージョン以下の場合に有効となる | @START<=JAVA7@ ~~~ @END<=JAVA7@ | Java7以下のバージョンでコンパイルする場合にのみ有効となる |
Javaバージョンによるimportの制御を行う例
@START<JAVA9@
import sun.reflect.ReflectionFactory;
@END<JAVA9@
@START=JAVA9@
import jdk.internal.reflect.ReflectionFactory;
@END=JAVA9@
上記の設定でJava9でコンパイルした場合
/* **Java Version Difference Comment Start**
import sun.reflect.ReflectionFactory;
**Java Version Difference Comment End** */
import jdk.internal.reflect.ReflectionFactory;
上記の設定でJava8,7,6でコンパイルした場合
import sun.reflect.ReflectionFactory;
/* **Java Version Difference Comment Start**
import jdk.internal.reflect.ReflectionFactory;
**Java Version Difference Comment End** */
設定キー | 説明 | 必須 | デフォルト値 | 設定例 |
---|---|---|---|---|
javaVersion | コンパイルに使用するJavaのバージョン | System.getProperty("java.specification.version")で取得できるJavaバージョン | 8 | |
fromDir | コピー元ファイルルートディレクトリ | ○ | 無し | ${basedir}/src/main/java |
toDir | コピー後ファイルコピー先ルートディレクトリ | ○ | 無し | ${basedir}/target/gen-src |
fromFileExtention | コピー対象ファイル拡張子 | ○ | 無し | javapp |
toFileExtention | コピー後ファイル拡張子 | java | java | |
encoding | ファイルの読み込み書き込みEncoding | システムのデフォルトエンコーディング | UTF-8 |
- Java8でコンパイル
- /src/main/java 配下のソースがコピー対象
- /target/gen-src にコピー後ファイルを配置
- javappがコピー対象ファイル拡張子
- コピー後のファイル拡張子はjava
- ソースファイルのエンコーディングはUTF-8
<plugins>
・・・
<plugin>
<groupId>com.github.nimbus-org</groupId>
<artifactId>commentout-by-javaversion-maven-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>generate-sources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<javaVersion>8</javaVersion>
<fromDir>${basedir}/src/main/java</fromDir>
<toDir>${basedir}/target/gen-src</toDir>
<fromFileExtention>javapp</fromFileExtention>
<toFileExtention>java</toFileExtention>
</configuration>
</execution>
</executions>
</plugin>
・・・
</plugins>
コピー元ファイルディレクトリからコピー対象ファイル拡張子のファイルを検索し、そのファイルに記載されたコピールールに従ってコピー後ディレクトリにファイルをコピーする
チェック対象JavaのVersionを@JAVA_VERSION@とし、不等号(=、<、<=)で有効なVersionを指定する
条件文字列 | 説明 | 設定例 | 設定例説明 |
---|---|---|---|
= | 対象のJavaバージョンと等しい場合に有効となる | @JAVA_VERSION@=8 | Java8でコンパイルする場合に有効となる |
< | 対象のJavaバージョンより大きい、小さい場合に有効となる | 6<@JAVA_VERSION@<9 | Java6より大きく、Java9より小さいバージョンでコンパイルする場合に有効となる |
<= | 対象のJavaバージョン以上、以下の場合に有効となる | 6<=@JAVA_VERSION@<=9 | Java6以上、Java9以下のバージョンでコンパイルする場合に有効となる |
Java6以上、Java9より小さい場合にコピーを行う。
// 6<=@JAVA_VERSION@<9