Zum Inhalt springen

Maven-Plugin

Kompilieren Sie Java und Kotlin in einem bestehenden Maven-Build mit javac und kotlinc von Elide: das elide-maven-plugin, der Drop-in-Ersatz für Kotlin und die Einrichtung nur über compilerId.

Auf dieser Seite

Mit dev.elide:elide-maven-plugin in einer pom.xml kompiliert der Build Java mit elide javac und Kotlin mit elide kotlinc. Abhängigkeitsauflösung, Tests, Packaging und alle anderen Plugins bleiben bei Maven.

Voraussetzungen

Version
Maven3.9 oder neuer
JDK, das Maven ausführt11 oder neuer
Elide1.6 oder neuer

Elide muss im PATH liegen, oder Sie setzen <executable> (siehe Konfiguration).

Ein Artefakt wählen

ArtefaktVerwenden, wennKompiliert
elide-maven-pluginNeue Einrichtung, Java und KotlinJava und Kotlin
elide-kotlin-maven-pluginDer Build nutzt bereits kotlin-maven-pluginKotlin; Java über maven-compiler-plugin
elide-java-compilerNur Java, maven-compiler-plugin bleibt unverändertJava

Alle drei liegen in Maven Central unter dev.elide, Version 1.0.0.

Installation

<build>
  <plugins>
    <plugin>
      <groupId>dev.elide</groupId>
      <artifactId>elide-maven-plugin</artifactId>
      <version>1.0.0</version>
      <extensions>true</extensions>
    </plugin>
  </plugins>
</build>

<extensions>true</extensions> ist erforderlich: Es ersetzt die Standard-Bindungen für das Kompilieren. Damit fügt das Plugin src/main/kotlin und src/test/kotlin als Quellverzeichnisse hinzu, außerdem eine kotlin-stdlib-Abhängigkeit, wenn das POM keine deklariert.

Um kotlin-maven-plugin an Ort und Stelle zu ersetzen, ändern Sie seine Koordinaten auf dev.elide:elide-kotlin-maven-plugin:1.0.0 und behalten seine Konfiguration bei; es akzeptiert dieselben Parameter.

Nur für Java, ohne neues Plugin:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.15.0</version>
  <dependencies>
    <dependency>
      <groupId>dev.elide</groupId>
      <artifactId>elide-java-compiler</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>
  <configuration>
    <compilerId>elide</compilerId>
  </configuration>
</plugin>

Goals

Mit aktivierten Extensions binden sich die Goals an den Lebenszyklus; keines braucht eine <execution>.

GoalPhaseFührt aus
elide:kaptprocess-sourcesÜbersprungen, sofern keine Annotationsprozessoren konfiguriert sind
elide:compile-kotlincompileelide kotlinc für die Hauptquellen
elide:compilecompileelide javac für die Hauptquellen, nach Kotlin
elide:test-kaptprocess-test-sourcesÜbersprungen, sofern keine Annotationsprozessoren konfiguriert sind
elide:test-compile-kotlintest-compileelide kotlinc für die Testquellen
elide:test-compiletest-compileelide javac für die Testquellen

elide-kotlin-maven-plugin hat dieselben Goals ohne die für Java, unter dem Präfix elide-kotlin.

Konfiguration

Jeder Parameter von maven-compiler-plugin und kotlin-maven-plugin gilt (<release>, <compilerArgs>, <args>, <jvmTarget>, …). Ein Parameter kommt hinzu:

ParameterStandardWirkung
executableelide im PATHPfad zur elide-Binärdatei
<plugin>
  <groupId>dev.elide</groupId>
  <artifactId>elide-maven-plugin</artifactId>
  <version>1.0.0</version>
  <extensions>true</extensions>
  <configuration>
    <executable>/opt/elide/bin/elide</executable>
  </configuration>
</plugin>

Mit elide-java-compiler setzen Sie <executable> stattdessen in der Konfiguration von maven-compiler-plugin.

Beispiel

Ein Projekt mit einem Kotlin-Objekt, einer Java-Hauptklasse und einem JUnit-Test:

pom.xml
src/main/kotlin/com/example/Greeter.kt
src/main/java/com/example/Hello.java
src/test/java/com/example/GreeterTest.java
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>hello</artifactId>
  <version>1.0.0</version>

  <properties>
    <maven.compiler.release>21</maven.compiler.release>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.13.4</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>dev.elide</groupId>
        <artifactId>elide-maven-plugin</artifactId>
        <version>1.0.0</version>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.5.4</version>
      </plugin>
    </plugins>
  </build>
</project>
mvn package
[INFO] Added kotlin-stdlib dependency, version 2.3.21
[INFO] --- elide:1.0.0:kapt (default-kapt) @ hello ---
[INFO] No annotation processors configured, skipping kapt
[INFO] --- elide:1.0.0:compile-kotlin (default-compile-kotlin) @ hello ---
[INFO] ✅  Kotlin sources compiled to `classes` (1.3s)
[INFO] --- elide:1.0.0:compile (default-compile) @ hello ---
[INFO] Compiling 1 source file with elide [forked debug release 21] to target/classes
[INFO] --- elide:1.0.0:test-compile (default-test-compile) @ hello ---
[INFO] Compiling 1 source file with elide [forked debug release 21] to target/test-classes
[INFO] --- surefire:3.5.4:test (default-test) @ hello ---
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] --- jar:3.5.0:jar (default-jar) @ hello ---
[INFO] Building jar: target/hello-1.0.0.jar
[INFO] BUILD SUCCESS

OpenRewrite und Abhängigkeitsabfragen

Für Projekte mit einer elide.pkl siehe OpenRewrite und Codeindex für Abhängigkeiten. Das Compiler-Plugin fügt keine Goals für Rewrite oder den Codeindex hinzu und gibt den von Maven aufgelösten Abhängigkeitsgraphen nicht an diese Befehle weiter. Lesen Sie die Grenze der Projekteinrichtung, bevor Sie sie neben Maven einsetzen.

Einschränkungen

  • kapt läuft nicht: Eine kapt-Execution mit konfigurierten Annotationsprozessoren schlägt fehl.
  • Kotlin-Compiler-Plugins (<compilerPlugins>) außer all-open, no-arg, sam-with-receiver, assignment und Lombok schlagen mit einem Compilerfehler fehl.
  • Die hinzugefügte kotlin-stdlib hat Version 2.3.21; deklarieren Sie kotlin-stdlib selbst, um eine andere zu wählen.
  • Jede Kompilierung startet einen neuen elide-Prozess; es gibt keinen gemeinsamen Compiler-Daemon zwischen Modulen.

Um stattdessen den gesamten Maven-Build nativ auszuführen, siehe POM-Export und natives Maven. Um Maven zu verlassen, siehe Bestehendes Projekt übernehmen.

War diese Seite hilfreich?