Как запустить метод main из класса Kotlin в проекте gradle? - PullRequest
1 голос
/ 24 мая 2019

Некоторое время назад я создал в IntelliJ проект на основе gradle, чтобы поиграть.Я добавил несколько классов Kotlin и Java в "main" и один класс Java в "test".

Теперь IntelliJ предлагает мне запустить этот тестовый класс.Но нет никакой возможности «запустить» новый main () Kotlin, который я только что добавил в новый файл .kt в главном разделе.

Все компилируется нормально, но нет никаких признаков того, что я мог бы "запустить" этот основной метод.

Я вижу этот вопрос , но это для чистого проекта Kotlin.

Я посмотрел в конфигурации "Run / Debug".В шаблонах есть один Kotlin.Когда я использую это, я могу использовать средство выбора файлов для просмотра моих классов Kotlin;вплоть до основного метода.Но кнопка «ОК» отключена, поэтому я не могу выбрать что-либо в качестве цели «выполнения».

Я подумал, что могу запустить один из моих классов Java, добавив эту задачу

task execute(type:JavaExec) {
    main = 'com.whatever.Hello'
    classpath = sourceSets.main.runtimeClasspath
}

и тогда я могу запустить gradle[execute].Но когда я указываю main на один из моих классов Kotlin, я получаю

Task: execute FAILED

Ошибка: не удалось найти или загрузить основной класс com.whwhat.TheKotlinClass

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы должны установить main = 'com.whatever.TheKotlinClassKt'. Компилятор Kotlin меняет имя скомпилированных классов.

Подробнее см .: Какова причина использования суффикса «Kt» в классах Kotlin?

0 голосов
/ 24 мая 2019

После долгих проб и ошибок я понял, что в моем скрипте gradle отсутствуют различные важные вещи.Кроме того, я также забыл пометить папку kotlin как «исходную папку» в IntelliJ (как предлагает сделать второй ответ на вопрос SO, связанный с моим вопросом).

ДляСсылка, вот рабочая версия моего скрипта gradle:

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
}

version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile "org.mockito:mockito-core:2.+"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile "org.jetbrains.kotlin:kotlin-stdlib-common"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

task execute(type:JavaExec) {
    main = 'com.whatever.TheKotlinClassKt'
    classpath = sourceSets.main.runtimeClasspath
}

И, примечание: как только я узнал, как правильно скомпилировать файлы Kotlin в проекте gradle... в IntelliJ IDE также отображается кнопка «Выполнить» для каждого класса Kotlin с функцией main ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...