Перейти к содержимому

Плагин Maven

Компилируйте Java и Kotlin в существующей сборке Maven с помощью javac и kotlinc из Elide: elide-maven-plugin, прямая замена для Kotlin и настройка только через compilerId.

На этой странице

Если добавить dev.elide:elide-maven-plugin в pom.xml, сборка компилирует Java через elide javac, а Kotlin через elide kotlinc. Разрешение зависимостей, тесты, упаковка и все остальные плагины остаются за Maven.

Требования

Версия
Maven3.9 или новее
JDK, на котором работает Maven11 или новее
Elide1.6 или новее

Elide должен быть в PATH, иначе задайте <executable> (см. Настройка).

Выбор артефакта

АртефактКогда использоватьКомпилирует
elide-maven-pluginНовая настройка, Java и KotlinJava и Kotlin
elide-kotlin-maven-pluginСборка уже использует kotlin-maven-pluginKotlin; Java через maven-compiler-plugin
elide-java-compilerТолько Java, maven-compiler-plugin остаётся как естьJava

Все три опубликованы в Maven Central под dev.elide, версия 1.0.0.

Установка

<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> обязателен: он заменяет стандартные привязки компиляции. С ним плагин добавляет src/main/kotlin и src/test/kotlin как корни исходников, а также зависимость kotlin-stdlib, если POM не объявляет её сам.

Чтобы заменить kotlin-maven-plugin на месте, поменяйте его координаты на dev.elide:elide-kotlin-maven-plugin:1.0.0 и оставьте конфигурацию; он принимает те же параметры.

Только для Java, без нового плагина:

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

Цели

При включённых расширениях цели привязываются к жизненному циклу; ни одной не нужен <execution>.

ЦельФазаЗапускает
elide:kaptprocess-sourcesПропускается, если не настроены процессоры аннотаций
elide:compile-kotlincompileelide kotlinc для основных исходников
elide:compilecompileelide javac для основных исходников, после Kotlin
elide:test-kaptprocess-test-sourcesПропускается, если не настроены процессоры аннотаций
elide:test-compile-kotlintest-compileelide kotlinc для тестовых исходников
elide:test-compiletest-compileelide javac для тестовых исходников

У elide-kotlin-maven-plugin те же цели, кроме целей для Java, с префиксом elide-kotlin.

Настройка

Действуют все параметры maven-compiler-plugin и kotlin-maven-plugin (<release>, <compilerArgs>, <args>, <jvmTarget>, …). Добавляется один параметр:

ПараметрПо умолчаниюДействие
executableelide из PATHПуть к бинарному файлу elide
<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>

С elide-java-compiler задавайте <executable> в конфигурации maven-compiler-plugin.

Пример

Проект с объектом на Kotlin, главным классом на Java и тестом JUnit:

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 и запросы к зависимостям

Для проектов с elide.pkl см. OpenRewrite и Индекс кода зависимостей. Плагин компилятора не добавляет целей для рефакторинга или индекса кода и не передаёт этим командам граф зависимостей, разрешённый Maven. Прежде чем использовать их рядом с Maven, прочитайте о границе настройки проекта.

Ограничения

  • kapt не запускается: выполнение kapt с настроенными процессорами аннотаций завершается ошибкой.
  • Плагины компилятора Kotlin (<compilerPlugins>), кроме all-open, no-arg, sam-with-receiver, assignment и Lombok, завершаются ошибкой компилятора.
  • Добавляемая kotlin-stdlib имеет версию 2.3.21; чтобы выбрать другую, объявите kotlin-stdlib сами.
  • Каждая компиляция запускает новый процесс elide; общего демона компилятора между модулями нет.

Чтобы вместо этого запускать всю сборку Maven нативно, см. Экспорт POM и нативный Maven. Чтобы уйти с Maven, см. Перенос существующего проекта.

Была ли эта страница полезной?