Не удалось найти или загрузить основной класс с помощью конфигурации приложения IntelliJ - PullRequest
6 голосов
/ 25 мая 2019

У меня есть проект в IntelliJ IDEA 2019.1.3, использующий Gradle, с основным классом, подобным этому:

public final class Main {
    public static void main(String[] args) {
        // Do stuff
    }
}

Но каждый раз, когда я пытаюсь запустить мою программу, она всегда выдает одну и ту же ошибку:

Error: Could not find or load main class com.example.Main
Caused by : java.lang.ClassNotFoundException: com.example.Main

Я использую шаблон конфигурации приложения.Я пробовал следующее:

  • Очистить / Перестроить проект
  • Обнулить кэши / перезапустить
  • Повторно импортировать проект Gradle
  • Удаление папки .idea
  • Удаление и воссоздание профиля конфигурации
  • Воссоздание проекта с нуля
  • Полная переустановка IntelliJ
  • Обновление с JDK 8 до JDK 11
  • Мои исходные наборы верны, папка сборки, модуль classpath, пакет файлов установлены правильно.Задача сборки запускается перед запуском.Фактически, в папке build/ и в сгенерированном jar-файле фактически есть файл Main.class.

Единственное известное мне решение - это запустить задачу gradle:

task run(type: JavaExec) {
    main = "com.example.MainKt"
    classpath = sourceSets.main.get().runtimeClasspath
    standardInput = System.in
    isIgnoreExitValue = true
}

Но я бы предпочел этого не делать, поскольку консоль не принимает ввод, по какой-то причине не поддерживает Юникод, и я не могу передавать аргументы программы так же легко, как в окне конфигурации IntelliJ.

У кого-нибудь была эта проблема и как она была исправлена?Это происходит со мной только с тех пор, как я обновил IntelliJ 2019.1, он отлично работал большую часть времени на 2018.3.6.

РЕДАКТИРОВАТЬ: настройки Gradle enter image description here

РЕДАКТИРОВАТЬ 2: Оригинальный вопрос был о Kotlin, но я понял, что я получаю ту же ошибку с Java.

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

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

Очевидно, что IntelliJ неправильно понимает путь к классу при импорте этого проекта из Gradle. Он ищет build/java/main вместо build/kotlin/main.

Для устранения проблемы Откройте «Настройки модуля» (F4) проекта и измените «путь вывода компиляции модуля» модулей desktop и core на путь вывода kotlin. Просто замените слово java в пути на kotlin:

module settings

Когда вы нажимаете кнопку «Выполнить» рядом с основным методом, происходит сбой следующим образом:

Caused by: java.lang.IllegalStateException: GLFW windows may only be created on the main thread and that thread must be the first thread in the process. Please run the JVM with -XstartOnFirstThread. For offscreen rendering, make sure another window toolkit (e.g. AWT or JavaFX) is initialized before GLFW.

Это можно исправить, отредактировав конфигурацию запуска и добавив -XstartOnFirstThread к параметрам виртуальной машины.

Следующая попытка завершится неудачей с этим исключением.

com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load dependencies of asset: libgdx.png

При изменении рабочего каталога в конфигурации запуска на каталог android/assets, как вы это делали в своей задаче gradle, демонстрация будет успешно запущена.

Для записи моего окружения:

OS: MacOs Mojave
JVM: openjdk version "1.8.0_212" (AdoptOpenJDK)
IntelliJ: 2019.1.3 Ultimate Edition
2 голосов
/ 15 июня 2019

Проблема связана с тем, что в проекте есть модуль Android.Модуль нуждается в плагине для Android, который глобально применяется ко всем модулям в проекте, даже к тем, которые не являются модулями Android.При применении к модулю добавляется фасет Android-Gradle , который изменяет путь к классу модуля со значения по умолчанию out/classes до build/classes/java.Для модулей kotlin основной класс не может быть найден во время выполнения, поскольку путь к классу неверен.

В настоящее время нет способа применить плагин android только к модулям android.Обходные пути включают в себя исправление файла android.jar, автоматическое удаление фасета Android-Gradle при синхронизации или перемещение модуля android во внешний проект.Чистого способа сделать это не существует.

О проблеме уже сообщалось здесь , но нет никаких признаков того, что она когда-либо будет исправлена.

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