コンパイルする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