Kotolin のプロジェクトを Maven で作成する
   2 min read

入門書を一通り読み終えたのでサンプルプロジェクトを作成しようと思いました。

JetBrains がメンテナンスしている archetype が利用できそうです。

mvn archetype:generate -DarchetypeGroupId=org.jetbrains.kotlin -DarchetypeArtifactId=kotlin-archetype-jvm

IntelliJ IDEA から作成した場合も似た感じの pom.xml が作成されるかなと思います。

Java と併存する場合は、公式リファレンスの記述が参考になります:

JDK17を利用して開発する場合、次の設定変更を pom.xml 対して行います:

  1. maven-compiler-plugin のバージョンを最新版に上げます。

    • この記事を書いた時点の最新バージョンは 3.10.1 でした

    • 前述Kotlin公式サイトに書かれているサンプルは 3.5.1 とかなり古く、 Java17 に対応していません

  2. properties セクションに次を追記します。

    <properties>
        <java.version>17</java.version>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <kotlin.compiler.jvmTarget>${java.version}</kotlin.compiler.jvmTarget>
    </properties>

また、 Spring Initializr の Kotlin 用プロジェクト雛形も参考になります。 次のリンク先に解説もあります:

書いてあることを要約すると:

  • Kotlin クラスをデフォルトで 非 final にする (all-open compiler plugin)

    • クラスのプロキシ化するのには継承可能でなければいけない。 AOP や mocking で必要。

    • test のときだけ mocking 用に非 final にする、みたいな使い方はできなさそう…?

  • 特定のアノテーション(例えば JPA の @Entity)が付与されたクラスに引数なしコンストラクタを生成する(no-arg compiler plugin)

  • -Xjsr305=strict で null 可能性に関するアノテーション有効化 (JSR-305 support)

  • Kotlin 用の Mockito ライクなライブラリ SpringMockK というものがあり、 Spring ではこれを推している(※ Spring 公式ライブラリではない)