Двухэтапная компиляция кода Kotlin с помощью kotlin-maven-plugin

У меня есть проект на основе Kotlin maven, скомпилированный с помощью . Структура моего проекта выглядит следующим образом:

      <root>
+- src/gen/kotlin
+- src/main/kotlin
...
  • содержит источники, которые будут генерировать другие исходные файлы.
  • содержит основные исходники проекта.

Я хочу запустить двухэтапную компиляцию во время сборки maven:

  1. компилировать только исходники генератора из , предположительно привязанные кprocess-sourcesфаза. тогда я буду использоватьmaven-exec-pluginдля выполнения скомпилированного генератора.
  2. скомпилировать все из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]

Есть ли способ добиться желаемой двухэтапной компиляции без использования подмодулей? Может быть, есть способ игнорировать/исключать исходный каталог сборки по умолчанию для конкретного выполнения?

0 ответов

Другие вопросы по тегам