Présentation de Kotlin à un projet Java Maven existant

introduction

Introduire Kotlin dans un projet Maven écrit en Java est facile. Réécrivez simplement pom.xml pour ajouter le code source Kotlin et compilez-le avec le code Java. Comme prévu * 100% interopérable avec Java ™ *! (\ * 'E` \ *)

Si je modifie pom.xml selon le document officiel, cela fonctionne d'une manière ou d'une autre, mais je n'ai pas compris pourquoi Maven fonctionne en premier lieu, alors je l'ai étudié.

C'est presque Maven plutôt que Kotlin

Avant / Après de pom.xml

Prenons un simple pom.xml '' comme exemple. En réécrivant pom.xml, vous pouvez ajouter le code de [Kotlin] au projet Maven qui fonctionnait à l'origine uniquement avec * .java``.

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

    <groupId>megmogmog1965</groupId>
    <artifactId>JavaJarToKotlin</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
+       <!-- Kotlin -->
+       <kotlin.version>1.1.2-5</kotlin.version>
    </properties>

    <dependencies>
+       <!-- Kotlin -->
+       <dependency>
+           <groupId>org.jetbrains.kotlin</groupId>
+           <artifactId>kotlin-stdlib-jre8</artifactId>
+           <version>${kotlin.version}</version>
+       </dependency>
+       <dependency>
+           <groupId>org.jetbrains.kotlin</groupId>
+           <artifactId>kotlin-test</artifactId>
+           <version>${kotlin.version}</version>
+           <scope>test</scope>
+       </dependency>
    </dependencies>

    <build>
        <plugins>
+           <!-- Kotlin -->
+           <plugin>
+               <groupId>org.jetbrains.kotlin</groupId>
+               <artifactId>kotlin-maven-plugin</artifactId>
+               <version>${kotlin.version}</version>
+               <executions>
+                   <execution>
+                       <id>compile</id>
+                       <phase>compile</phase>
+                       <goals>
+                           <goal>compile</goal>
+                       </goals>
+                   </execution>
+                   <execution>
+                       <id>test-compile</id>
+                       <phase>test-compile</phase>
+                       <goals>
+                           <goal>test-compile</goal>
+                       </goals>
+                   </execution>
+               </executions>
+           </plugin>

            <!-- for .java -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.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>compile</id>
+                       <phase>compile</phase>
+                       <goals>
+                           <goal>compile</goal>
+                       </goals>
+                   </execution>
+                   <execution>
+                       <id>testCompile</id>
+                       <phase>test-compile</phase>
+                       <goals>
+                           <goal>testCompile</goal>
+                       </goals>
+                   </execution>
+               </executions>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Commentaire

Tout d'abord, je ne comprends pas la signification de Phase ou Objectif, je vais donc essayer de faire un diagramme. Voici le diagramme Build Lifecycle du `` pom.xml '' ci-dessus.

kotlin-build-lifecycle.png

En bref, je veux construire le code Kotlin d'abord et * .java plus tard. Sinon, la référence de * .java à Kotlin ne peut pas être résolue.

properties

<properties>
    <!-- Kotlin -->
    <kotlin.version>1.1.2-5</kotlin.version>
</properties>

dependencies

<dependencies>
    <!-- Kotlin -->
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jre8</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-test</artifactId>
        <version>${kotlin.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

plugins --> kotlin-maven-plugin

<plugins>
    <!-- Kotlin -->
    <plugin>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-maven-plugin</artifactId>
        <version>${kotlin.version}</version>
        <executions>
            <execution>
                <id>compile</id>
                <phase>compile</phase>
                <goals>
                    <goal>compile</goal>
                </goals>
            </execution>
            <execution>
                <id>test-compile</id>
                <phase>test-compile</phase>
                <goals>
                    <goal>test-compile</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    ...

Identique à `` test-compile ''

plugins --> maven-compiler-plugin

<plugins>
    ...
    
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.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>compile</id>
                <phase>compile</phase>
                <goals>
                    <goal>compile</goal>
                </goals>
            </execution>
            <execution>
                <id>testCompile</id>
                <phase>test-compile</phase>
                <goals>
                    <goal>testCompile</goal>
                </goals>
            </execution>
        </executions>
        ...

En d'autres termes, pour exécuter kotlin-maven-plugin: compilez d'abord, je l'ai supprimé et ajouté à nouveau.

Identique à `` test-compile ''

Recommended Posts

Présentation de Kotlin à un projet Java Maven existant
Présentez Maven au projet Tomcat
Utilisez Maven pour ajouter votre bibliothèque Java préférée à votre environnement.
Classe Kotlin à envoyer aux développeurs Java
Comment faire un projet Maven
[Android] Convertir le code Java Android en Kotlin
Kotlin's Class part.2 à envoyer aux développeurs Java
Essayez de résoudre Project Euler en Java
Convertir toutes les applications Android (Java) en Kotlin
Ajout de slf4J + logback au projet Eclipse Maven
Fonctions de portée Kotlin à envoyer aux développeurs Java
[Java] [Maven3] Résumé de l'utilisation de Maven3
Kotlin vs Java: quel langage de programmation choisir pour votre application Android
Mémo pour la migration de Java vers Kotlin
AndroidStudio Faisons référence au C ++ dans le module des autres projets (Java / kotlin)
Déployez des applications Web Java sur Azure avec maven
Migrer de Java vers Kotlin côté serveur + Spring-boot
Paramètres initiaux pour la réécriture de projets Java sur Kotlin
Premiers pas avec Kotlin à envoyer aux développeurs Java
Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Java ajoute des numéros de page aux documents PDF existants
Où les programmeurs Java ont tendance à trébucher sur Kotlin
Introduction à kotlin pour les développeurs iOS ②-Création de projet
Comment écrire Java String # getBytes dans Kotlin?
Ce que des personnes inexpérimentées en Java ont fait pour étudier Kotlin
Ajoutez des packages à votre projet avec Swift PM
java, mémo maven
[Java] Introduction à Java
Introduction à Java
Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 2
Introduisez RMagick pour convertir les fichiers image existants dans un autre format
Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 1
Rails6 J'ai essayé d'introduire Docker dans une application existante
Je veux faire des transitions d'écran avec kotlin et java!