Код, сгенерированный каптом, недоступен на этапе компиляции - PullRequest
0 голосов
/ 15 октября 2018

Я написал генератор кода, используя kapt, и использую его в проекте, компилирующем kotlin с maven.

Я обнаружил, что генератор kapt вызывается после фазы компиляции Kotlin, что не позволяет мне использовать сгенерированныйкод внутри kotlin в том же проекте.

Однако, если я ссылаюсь на сгенерированные классы из Java в том же проекте, он работает нормально.Это связано с тем, что фаза компиляции Java наступает после фазы генерации kotlin.

Я определил цель kapt до цели компиляции Kotlin в конфигурации maven (как упоминалось в docs ), но этопохоже, ничего не изменилось:

        <plugin>
            <artifactId>kotlin-maven-plugin</artifactId>
            <groupId>org.jetbrains.kotlin</groupId>
            <version>${kotlin.version}</version>
            <executions>
                <execution>
                    <id>kapt</id>
                    <goals>
                        <goal>kapt</goal>
                    </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>src/main/java</sourceDir>
                        </sourceDirs>
                        <annotationProcessorPaths>
                            <annotationProcessorPath>
                                <groupId>lang.taxi</groupId>
                                <artifactId>taxi-annotation-processor</artifactId>
                                <version>${taxi.version}</version>
                            </annotationProcessorPath>
                        </annotationProcessorPaths>
                    </configuration>
                </execution>
                <execution>
                    <id>compile</id>
                    <goals> <goal>compile</goal> </goals>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <goals> <goal>test-compile</goal> </goals>
                    <configuration>
                        <sourceDirs>
                            <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                            <sourceDir>${project.basedir}/src/test/java</sourceDir>
                        </sourceDirs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Можно ли настроить Kotlin так, чтобы я мог использовать сгенерированный код из Kotlin в том же проекте?

1 Ответ

0 голосов
/ 31 октября 2018

Проблема заключалась в том, что kotlin-maven-plugin был определен в родительском pom без цели kapt, а затем снова в собственном pom модуля с kapt.

Это привело к тому, что задача компиляции выполнялась дозадача kapt, хотя pom модуля указывал порядок kapt до compile.

Удаление записи родительского pom решило проблему.

...