Publié le 07/12/2017, rédigé par Davy CLAISSE

Maven

Comment builder un projet Kotlin avec Maven ?

Rappel : Kotlin est un langage libre, fonctionnant sur la machine virtuelle Java, développé sous licence Apache 2 par la société JetBrains.

Organisation de l'arborescence de fichiers

Respect de l'arborescence suivante :

.                       <= Racine du projet
|__ src/
|   |__ main/
|   |   |__ kotlin/     <= Placer les sources écrites en Kotlin ici
|   |
|   |__ test/
|       |__ kotlin/     <= Placer les sources des tests écrits en Kotlin ici
|
|__ pom.xml             <= Fichier de build de Maven

Configurer le pom de Maven

Voici le minimum de configuration à ajouter dans le pom de votre projet. Attention ! Seule une des trois dépendances est à choisir, les deux autres sont à enlever.

<?xml version="1.0" encoding="UTF-8"?>
<project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itametis.university.samples</groupId>
    <artifactId>kotlin-hello-world</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <properties>
        <kotlin.version>1.1.3-2</kotlin.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- REMARQUE : UNE SEULE DES TROIS DÉPENDANCES EST À CHOISIR POUR VOTRE PROJET -->
    <dependencies>
        <!-- Votre code Kotlin dépend de la kotlin-stdlib pour être compilé (ici la compatibilité est Java 6) -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>${kotlin.version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- Idem mais pour utilisé l'API de Java 7 (incluant Java 6) -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib-jre7</artifactId>
            <version>${kotlin.version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- Idem mais pour utilisé l'API de Java 8 (incluant Java 7) -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib-jre8</artifactId>
            <version>${kotlin.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <!-- Il faut indiquer à Maven l'emplacement des sources Kotlin -->
        <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <!-- Le Kotlin compiler va compiler les sources -->
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <!-- Le Kotlin compiler va compiler les sources des tests -->
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>