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