No-arg コンパイラプラグイン
no-arg コンパイラプラグインは、特定のアノテーションが付与されたクラスに対して、追加の引数なしコンストラクタ(zero-argument constructor)を生成します。
生成されるコンストラクタはシンセティック(synthetic)であるため、Java や Kotlin から直接呼び出すことはできませんが、リフレクションを使用して呼び出すことができます。
これにより、Kotlin または Java の観点からは引数なしコンストラクタがない場合でも、Java Persistence API (JPA) がクラスをインスタンス化できるようになります(以下の kotlin-jpa プラグインの説明を参照してください)。
Kotlin ファイル内での記述
引数なしコンストラクタが必要なコードをマークするために、新しいアノテーションを追加します:
package com.my
annotation class AnnotationGradle
Gradle の plugins DSL を使用してプラグインを追加します:
plugins {
kotlin("plugin.noarg") version "2.3.0"
}plugins {
id "org.jetbrains.kotlin.plugin.noarg" version "2.3.0"
}次に、アノテーションが付与されたクラスに対して引数なしコンストラクタの生成をトリガーする、no-arg アノテーションのリストを指定します:
noArg {
annotation("com.my.Annotation")
}シンセティックコンストラクタから初期化ロジックを実行させたい場合は、invokeInitializers オプションを有効にします。デフォルトでは無効になっています。
noArg {
invokeInitializers = true
}Maven
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<!-- または JPA サポートのための "jpa" -->
<plugin>no-arg</plugin>
</compilerPlugins>
<pluginOptions>
<option>no-arg:annotation=com.my.Annotation</option>
<!-- シンセティックコンストラクタでインスタンス初期化子を呼び出す -->
<!-- <option>no-arg:invokeInitializers=true</option> -->
</pluginOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-noarg</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>JPA サポート
all-open の上にラップされた kotlin-spring プラグインと同様に、kotlin-jpa は no-arg の上にラップされています。このプラグインは、@Entity、@Embeddable、および @MappedSuperclass を no-arg アノテーションとして自動的に指定します。
Gradle の plugins DSL を使用してプラグインを追加します:
plugins {
kotlin("plugin.jpa") version "2.3.0"
}plugins {
id "org.jetbrains.kotlin.plugin.jpa" version "2.3.0"
}Maven では、jpa プラグインを有効にします:
<compilerPlugins>
<plugin>jpa</plugin>
</compilerPlugins>コマンドラインコンパイラ
コンパイラプラグインのクラスパスにプラグインの JAR ファイルを追加し、アノテーションまたはプリセットを指定します:
-Xplugin=$KOTLIN_HOME/lib/noarg-compiler-plugin.jar
-P plugin:org.jetbrains.kotlin.noarg:annotation=com.my.Annotation
-P plugin:org.jetbrains.kotlin.noarg:preset=jpa