Einführung in Kotlin in ein bestehendes Java Maven-Projekt

Einführung

Die Einführung von Kotlin in ein in Java geschriebenes Maven-Projekt ist einfach. Schreiben Sie einfach pom.xml um, um den Kotlin -Quellcode hinzuzufügen und ihn mit dem Java-Code zu erstellen. Wie erwartet * 100% interoperabel mit Java ™ *! (\ * 'E` \ *)

Wenn ich pom.xml gemäß dem offiziellen Dokument ändere, funktioniert es irgendwie, aber ich habe nicht verstanden, warum Maven überhaupt funktioniert, also habe ich es untersucht.

Es ist fast Maven und nicht Kotlin

Vorher / Nachher von pom.xml

Nehmen wir als Beispiel ein einfaches pom.xml. Durch Umschreiben von pom.xml können Sie den Code von Kotlin zum Maven-Projekt hinzufügen, das ursprünglich nur mit * .java funktioniert hat.

<?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>

Kommentar

Zunächst einmal verstehe ich die Bedeutung von Phase oder Ziel nicht, daher werde ich versuchen, ein Diagramm zu erstellen. Das Folgende ist das Build Lifecycle -Diagramm der obigen pom.xml.

kotlin-build-lifecycle.png

Kurz gesagt, ich möchte zuerst den Code für Kotlin und später * .java erstellen. Andernfalls kann der Verweis von * .java auf Kotlin nicht aufgelöst werden.

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>
    ...

Wie 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>
        ...

Mit anderen Worten, um kotlin-maven-plugin: compile zuerst auszuführen, habe ich es gelöscht und erneut hinzugefügt.

Wie test-compile

Recommended Posts

Einführung in Kotlin in ein bestehendes Java Maven-Projekt
Stellen Sie Maven das Tomcat-Projekt vor
Verwenden Sie Maven, um Ihrer Umgebung Ihre bevorzugte Java-Bibliothek hinzuzufügen.
Kotlin-Klasse zum Senden an Java-Entwickler
Wie erstelle ich ein Maven-Projekt?
[Android] Konvertieren Sie Android Java-Code in Kotlin
Kotlins Klasse Teil 2 zum Senden an Java-Entwickler
Versuchen Sie, Project Euler in Java zu lösen
Konvertieren Sie alle Android-Apps (Java) in Kotlin
Slf4J + logback zum Eclipse Maven-Projekt hinzugefügt
Kotlin-Scope-Funktionen zum Senden an Java-Entwickler
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
Kotlin vs. Java: Welche Programmiersprache Sie für Ihre Android-App auswählen sollten
Memo für die Migration von Java nach Kotlin
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Migrieren Sie von Java zu Server Side Kotlin + Spring-Boot
Grundeinstellungen für das Umschreiben von Java-Projekten in Kotlin
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Was ich getan habe, als ich Java zu Kotlin konvertiert habe
Java fügt vorhandenen PDF-Dokumenten Seitenzahlen hinzu
Wo Java-Programmierer dazu neigen, über Kotlin zu stolpern
Einführung in Kotlin für iOS-Entwickler ②-Projekterstellung
Wie schreibe ich Java String # getBytes in Kotlin?
Was Java-Unerfahrene getan haben, um Kotlin zu studieren
Fügen Sie Ihrem Projekt mit Swift PM Pakete hinzu
Java, Maven Memo
[Java] Einführung in Java
Einführung in Java
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 2
Führen Sie RMagick ein, um vorhandene Bilddateien in ein anderes Format zu konvertieren
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 1
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!