Иногда бывает, что проект пишется на kotlin
, я относительно недавно открыл для себя ktor-project
, очень удобная штука, но бывают ситуации, когда нужно добавить код, написанный на java, какие же ситуации тут могут быть?
- Классы сгенерированные
- Нужно втащить кусок либы
- Что-то еще, когда не хочется или не получается подключить jar в зависимости
Можно пойти по пути перегенерации исходников в kotlin, но если их реально много, то решение уже не оптимально, либо же по каким-то причинам не хочется этого делать.
В таком случае, стоит настроить maven особым образом, о чем я сейчас и расскажу
Первое, что я конечно же сделал, пошел в гугл, и есть хороший мануал, но есть один нюанс, в моей конфигурации это не сработало.
Начав поиск и решение проблемы, я понял, что что-то не то с компиляцией. В папке target/classes
нет моих исходников java. Изучив разные материалы и ответы на stackoverflow я так и не нашел ответа и начал думать, подключив все чертоги своего разума и опыта
Бинго! Надо подключить плагин, который можно будет как-то настроить, что бы он все скомпилировал и положил в target
.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Тут важным является блок configuration/sources/source
, так как по умолчанию путь будет взят из build/sourceDirectory
, а там у нас путь к исходникам kotlin, проект то у нас больше на нем.
Так же стоит настроить плагин kotlin-maven-plugin
. Тут важной является секция configuration/sourceDirs
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin_version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<source>src/main/java</source>
<source>src/main/kotlin</source>
</sourceDirs>
</configuration>
</execution>
...
</executions>
</plugin>
Таким образом, все это будет работать так, как нужно, скомпилируется, котлин будет видеть код на java, и так же все попадет в jar файл, который соберет maven
Смотреть полный пример GitHub