Двухэтапная компиляция кода Kotlin с помощью kotlin-maven-plugin
У меня есть проект на основе Kotlin maven, скомпилированный с помощью . Структура моего проекта выглядит следующим образом:
<root>
+- src/gen/kotlin
+- src/main/kotlin
...
- содержит источники, которые будут генерировать другие исходные файлы.
- содержит основные исходники проекта.
Я хочу запустить двухэтапную компиляцию во время сборки maven:
- компилировать только исходники генератора из , предположительно привязанные к
process-sources
фаза. тогда я буду использоватьmaven-exec-plugin
для выполнения скомпилированного генератора. - скомпилировать все из
src/main/kotlin
+ выход генератора.
Я попытался создать внутри 2 отдельных исполненияkotlin-maven-plugin
:
...
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
...
</compilerPlugins>
</configuration>
<executions>
<execution>
<id>codegen</id>
<goals>
<goal>compile</goal>
</goals>
<phase>generate-sources</phase>
<configuration >
<sourceDirs>
<sourceDir>${project.basedir}/src/gen/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
...
</plugin>
Проблема в том, что мой родительский pom определяет
<build>
<sourceDirectory>src/main/kotlin</sourceDirectory>
<testSourceDirectory>src/test/kotlin</testSourceDirectory>
...
</build>
Этотbuild.sourceDirectory
затем добавляется к моемуcodegen
выполнение, хотя я явно настраиваюsrc/gen/kotlin
какsourceDir
:
> mvn -X clean process-sources
...
[DEBUG] Loading mojo org.jetbrains.kotlin:kotlin-maven-plugin:1.8.22:compile from plugin realm ClassRealm[plugin>org.jetbrains.kotlin:kotlin-maven-plugin:1.8.22, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@42110406]
[DEBUG] Configuring mojo execution 'org.jetbrains.kotlin:kotlin-maven-plugin:1.8.22:compile:codegen' with basic configurator -->
[DEBUG] (f) classpath = ...
...
[DEBUG] (f) output = <path>/target/classes
...
[DEBUG] (f) sourceDirs = [<path>/src/gen/kotlin]
...
[DEBUG] Compiling Kotlin sources from [<path>/src/gen/kotlin, <path</src/main/kotlin]
Есть ли способ добиться желаемой двухэтапной компиляции без использования подмодулей? Может быть, есть способ игнорировать/исключать исходный каталог сборки по умолчанию для конкретного выполнения?