Если добавить dev.elide:elide-maven-plugin в pom.xml, сборка компилирует Java через elide javac, а Kotlin через
elide kotlinc. Разрешение зависимостей, тесты, упаковка и все остальные плагины остаются за Maven.
Требования
| Версия | |
|---|---|
| Maven | 3.9 или новее |
| JDK, на котором работает Maven | 11 или новее |
| Elide | 1.6 или новее |
Elide должен быть в PATH, иначе задайте <executable> (см. Настройка).
Выбор артефакта
| Артефакт | Когда использовать | Компилирует |
|---|---|---|
elide-maven-plugin | Новая настройка, Java и Kotlin | Java и Kotlin |
elide-kotlin-maven-plugin | Сборка уже использует kotlin-maven-plugin | Kotlin; 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:kapt | process-sources | Пропускается, если не настроены процессоры аннотаций |
elide:compile-kotlin | compile | elide kotlinc для основных исходников |
elide:compile | compile | elide javac для основных исходников, после Kotlin |
elide:test-kapt | process-test-sources | Пропускается, если не настроены процессоры аннотаций |
elide:test-compile-kotlin | test-compile | elide kotlinc для тестовых исходников |
elide:test-compile | test-compile | elide javac для тестовых исходников |
У elide-kotlin-maven-plugin те же цели, кроме целей для Java, с префиксом elide-kotlin.
Настройка
Действуют все параметры maven-compiler-plugin и kotlin-maven-plugin (<release>, <compilerArgs>, <args>,
<jvmTarget>, …). Добавляется один параметр:
| Параметр | По умолчанию | Действие |
|---|---|---|
executable | elide из 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 SUCCESSOpenRewrite и запросы к зависимостям
Для проектов с 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, см. Перенос существующего проекта.