JDK 8で追加された「-parameters」コンパイルオプションの指定方法(Maven, IntelliJ, Spring Tool Suite=Eclipse)


今回は、JDK 8で追加された「-parameters」コンパイルオプションを、Maven(Maven Compiler Plugin)、IntelliJ IDEA, Spring Tool Suite(=Eclipse)で指定する方法を紹介します。

動作環境

Maven

$ ./mvnw -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00)
Maven home: /Users/xxx/.m2/wrapper/dists/apache-maven-3.3.9-bin/2609u9g41na2l7ogackmif6fj2/apache-maven-3.3.9
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.5", arch: "x86_64", family: "mac"

IntelliJ IDEA

IntelliJ IDEA 2016.3.4
Build #IU-163.12024.16, built on January 31, 2017
Licensed to XXXX XXXX
Subscription is active until September 21, 2017
JRE: 1.8.0_112-release-408-b6 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

Spring Tool Suite

Spring Tool Suite 

Version: 3.8.3.RELEASE
Build Id: 201612191351
Platform: Eclipse Neon.2 (4.6.2)

Maven

Mavenの場合は、Apache Maven Compiler Pluginのコンフィギュレーションに「-parameters」オプションを加えるだけです。

pom.xml
<!-- ... -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArgs>
                    <arg>-parameters</arg> <!-- ← 追加!! -->
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
<!-- ... -->

IntelliJ IDEA

IntelliJ IDEAの場合は、「Preferences > Build, Execution, Deployment > Compiler > Java Compiler」を選択して表示される画面の「Additional command line parameters:」に「-parameters」を指定するだけです。コンパイルオプションを変更した後は必ず再ビルド(「Build > Rebuild」)してください!!

Spring Tool Suite(Eclipse)

Spring Tool Suite(Eclipse)の場合は、「Preferences > Java > Compiler」を選択して表示される画面の「Store information about method parameters (usable via reflection)」をチェックするだけです。念のためコンパイルオプションを変更した後は必ず再ビルド(「Project > Clean...」)してください!!

まとめ

私が仕事でよく使うSpringやMyBatis(3.4.1+)も-parametersオプションをサポートしており、アノテーションで引数名を指定する手間(or 冗長な指定)を省いてくれます。Springの場合はデバッグ情報(-gオプション指定時に出力される情報)から引数の名前を解決する仕組みを独自に提供していますが、-parametersオプションを使う方が実行時に効率的に引数名を解決することができます。
今回は記載しませんでしたが、JVM言語の一つであるKotlinも1.1からJavaの-parameters相当のコンパイルオプションがサポートされます。そちらについては、「Kotlin 1.1とMyBatis 3.4.1で@Paramを排除できる!!」の中で使い方(設定方法)を紹介しているので、興味がある方はそちらも参照してください!