メインコンテンツまでスキップ

Maven

Mavenは、Javaベースのプロジェクトをビルドおよび管理するために使用できるビルドシステムです。

プラグインの構成と有効化

kotlin-maven-pluginはKotlinのソースとモジュールをコンパイルします。 現在、Maven v3のみがサポートされています。

pom.xmlファイルで、使用するKotlinのバージョンをkotlin.versionプロパティに定義します。

<properties>
<kotlin.version>2.1.20</kotlin.version>
</properties>

kotlin-maven-pluginを有効にするには、pom.xmlファイルを更新します。

<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>2.1.20</version>
</plugin>
</plugins>

JDK 17の使用

JDK 17を使用するには、.mvn/jvm.configファイルに以下を追加します。

--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED

リポジトリの宣言

デフォルトでは、mavenCentralリポジトリはすべてのMavenプロジェクトで使用できます。 他のリポジトリのアーティファクトにアクセスするには、 <repositories>要素で各リポジトリのIDとURLを指定します。

<repositories>
<repository>
<id>spring-repo</id>
<url>https://repo.spring.io/release</url>
</repository>
</repositories>
注記

GradleプロジェクトでmavenLocal()をリポジトリとして宣言すると、GradleプロジェクトとMavenプロジェクトを切り替えるときに問題が発生する可能性があります。 詳細については、リポジトリの宣言を参照してください。

依存関係の設定

Kotlinには、アプリケーションで使用できる広範な標準ライブラリがあります。 プロジェクトで標準ライブラリを使用するには、次の依存関係をpom.xmlファイルに追加します。

<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
注記

Kotlinのバージョンが以下より古い状態でJDK 7または8をターゲットにしている場合は、

  • 1.8の場合は、kotlin-stdlib-jdk7またはkotlin-stdlib-jdk8をそれぞれ使用します。
  • 1.2の場合は、kotlin-stdlib-jre7またはkotlin-stdlib-jre8をそれぞれ使用します。

プロジェクトでKotlinリフレクション またはテスト機能を使用する場合は、対応する依存関係も追加する必要があります。 アーティファクトIDは、リフレクションライブラリの場合はkotlin-reflect、テストライブラリの場合はkotlin-testおよびkotlin-test-junitです。

Kotlinのみのソースコードのコンパイル

ソースコードをコンパイルするには、<build>タグでソースディレクトリを指定します。

<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
</build>

ソースをコンパイルするには、Kotlin Maven Pluginを参照する必要があります。

<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>

<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>

<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Kotlin 1.8.20以降では、上記の<executions>要素全体を<extensions>true</extensions>に置き換えることができます。 拡張機能を有効にすると、compiletest-compilekapt、およびtest-kaptの実行がビルドに自動的に追加され、適切なライフサイクルフェーズにバインドされます。 実行を構成する必要がある場合は、そのIDを指定する必要があります。 この例については、次のセクションを参照してください。

注記

複数のビルドプラグインがデフォルトのライフサイクルを上書きし、extensionsオプションも有効にしている場合、 <build>セクションの最後のプラグインがライフサイクル設定に関して優先されます。 ライフサイクル設定に対するそれ以前の変更はすべて無視されます。

KotlinとJavaのソースのコンパイル

KotlinとJavaのソースコードを含むプロジェクトをコンパイルするには、Javaコンパイラーの前にKotlinコンパイラーを呼び出します。 Mavenの用語では、kotlin-maven-pluginmaven-compiler-pluginの前に実行されるようにすることを意味します。これを行うには、次のメソッドを使用し、 pom.xmlファイルでkotlinプラグインがmaven-compiler-pluginより前にあることを確認します。

<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<extensions>true</extensions> <!-- You can set this option
to automatically take information about lifecycles -->
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal> <!-- You can skip the <goals> element
if you enable extensions for the plugin -->
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal> <!-- You can skip the <goals> element
if you enable extensions for the plugin -->
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<executions>
<!-- Replacing default-compile as it is treated specially by Maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by Maven -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

インクリメンタルコンパイルの有効化

ビルドを高速化するために、kotlin.compiler.incrementalプロパティを追加してインクリメンタルコンパイルを有効にできます。

<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>

または、-Dkotlin.compiler.incremental=trueオプションを指定してビルドを実行します。

アノテーション処理の構成

kapt – Mavenでの使用を参照してください。

JARファイルの作成

モジュールのコードのみを含む小さなJARファイルを作成するには、Mavenのpom.xmlファイルのbuild->pluginsに以下を含めます。ここで、main.classはプロパティとして定義され、メインのKotlinまたはJavaクラスを指します。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

自己完結型のJARファイルの作成

モジュールのコードとその依存関係を含む自己完結型のJARファイルを作成するには、Mavenのpom.xmlファイルのbuild->pluginsに以下を含めます。ここで、main.classはプロパティとして定義され、 メインのKotlinまたはJavaクラスを指します。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals> <goal>single</goal> </goals>
<configuration>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>

この自己完結型のJARファイルは、アプリケーションを実行するためにJREに直接渡すことができます。

java -jar target/mymodule-0.0.1-SNAPSHOT-jar-with-dependencies.jar

コンパイラーオプションの指定

コンパイラーの追加のオプションと引数は、Mavenプラグインノードの<configuration>要素のタグとして指定できます。

<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<extensions>true</extensions> <!-- If you want to enable automatic addition of executions to your build -->
<executions>...</executions>
<configuration>
<nowarn>true</nowarn> <!-- Disable warnings -->
<args>
<arg>-Xjsr305=strict</arg> <!-- Enable strict mode for JSR-305 annotations -->
...
</args>
</configuration>
</plugin>

オプションの多くは、プロパティを介して構成することもできます。

<project ...>
<properties>
<kotlin.compiler.languageVersion>2.1</kotlin.compiler.languageVersion>
</properties>
</project>

次の属性がサポートされています。

JVMに固有の属性

NameProperty nameDescriptionPossible valuesDefault value
nowarn警告を生成しないtrue, falsefalse
languageVersionkotlin.compiler.languageVersion指定されたバージョンのKotlinとのソース互換性を提供する"1.8", "1.9", "2.0", "2.1", "2.2" (EXPERIMENTAL)
apiVersionkotlin.compiler.apiVersionバンドルされたライブラリの指定されたバージョンからの宣言のみを使用できるようにする"1.8", "1.9", "2.0", "2.1", "2.2" (EXPERIMENTAL)
sourceDirsコンパイルするソースファイルを含むディレクトリプロジェクトのソースルート
compilerPlugins有効なコンパイラープラグイン[]
pluginOptionsコンパイラープラグインのオプション[]
args追加のコンパイラー引数[]
jvmTargetkotlin.compiler.jvmTarget生成されたJVMバイトコードのターゲットバージョン"1.8", "9", "10", ..., "23""1.8"
jdkHomekotlin.compiler.jdkHomeデフォルトのJAVA_HOMEの代わりに、指定された場所からカスタムJDKをクラスパスに含めます

BOMの使用

KotlinのBill of Materials (BOM)を使用するには、 kotlin-bomへの依存関係を記述します。

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-bom</artifactId>
<version>2.1.20</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

ドキュメントの生成

標準のJavadoc生成プラグイン(maven-javadoc-plugin)はKotlinコードをサポートしていません。 Kotlinプロジェクトのドキュメントを生成するには、Dokkaを使用します。 Dokkaは、混合言語プロジェクトをサポートし、標準のJavadocを含む複数の形式で出力を生成できます。 MavenプロジェクトでDokkaを構成する方法の詳細については、Mavenを参照してください。

OSGiサポートの有効化

MavenプロジェクトでOSGiサポートを有効にする方法を学びます