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

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>
println '', listOf '', etc.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>
...
compile '' Objectif Exécution de kotlin-maven-pluginà la phase compile`` de Build LifecycleIdentique à `` 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>
...
default-compile '' de la phase de compilation '' dans le cycle de vie de la constructioncompile '' Objectif Exécution de maven-compiler-pluginà la phase compile '' de Build LifecycleEn d'autres termes, pour exécuter kotlin-maven-plugin: compilez d'abord, je l'ai supprimé et ajouté à nouveau.
Identique à `` test-compile ''
Recommended Posts