Вопрос java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics

Версия Minecraft
1.18.X

turbowood

Пользователь
Сообщения
119
Решения
3
Всем привет, решил полностью отказаться от джавы и начать писать плагины на Kotlin.

Я создал проект, в котором есть только одна команда, файл Utils:


Java:
companion object {
        fun color(str: String) : String {
            return ChatColor.translateAlternateColorCodes('&', str)
        }companion object {
        fun color(str: String) : String {
            return ChatColor.translateAlternateColorCodes('&', str)
        }

        fun sendLocalMessage(player: Player, radius: Int, message: String) {
            for (player1: Player in player.location.world?.players!!) {
                player1.sendMessage(color(message))
            }
        }
    }

        fun sendLocalMessage(player: Player, radius: Int, message: String) {
            for (player1: Player in player.location.world?.players!!) {
                player1.sendMessage(color(message))
            }
        }
    }



Java:
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
        if (sender !is Player) {
            return true
        } else if (!sender.hasPermission("roleplay.me")) {
            return true
        }

        val message = args.joinToString(" ") // TODO String Builder
        val finalMessage: String = String.format(format, sender.name, message)
        sendLocalMessage(sender, 10, finalMessage)

        return true
    }

И сама ошибка (При использовании команды):

Java:
Caused by: java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
        at com.turbowood.plugins.rolePlay.Commands.MeCMD.onCommand(MeCMD.kt) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-api-1.18.2-R0.1-SNAPSHOT.jar:?]


Объявил команду вот так:
Java:
override fun onEnable() {
        getCommand("me")?.setExecutor(MeCMD)
    }
 
Решение
Нужно шейдить библиотеку котлина в сам JAR (но тогда вес JAR файла будет заметно больше, хоть и все нужные библиотеки будут в нём) либо использовать libraries в plugin.yml и через него добавлять kotlin:

Примеры:
- шейд при сборке (не лучший вариант, но тоже имеет место быть):

- libraries:
Объединено

И кстати, вместо companion object лучше сделай просто эти функции вне какого-либо класса. А для метода рассылки сообщения...
Нужно шейдить библиотеку котлина в сам JAR (но тогда вес JAR файла будет заметно больше, хоть и все нужные библиотеки будут в нём) либо использовать libraries в plugin.yml и через него добавлять kotlin:

Примеры:
- шейд при сборке (не лучший вариант, но тоже имеет место быть):

- libraries:
Объединено

И кстати, вместо companion object лучше сделай просто эти функции вне какого-либо класса. А для метода рассылки сообщения игрокам вокруг попробуй extension-функцию, тоже крутая штука
 
Последнее редактирование:
Нужно шейдить библиотеку котлина в сам JAR (но тогда вес JAR файла будет заметно больше, хоть и все нужные библиотеки будут в нём) либо использовать libraries в plugin.yml и через него добавлять kotlin:

Примеры:
- шейд при сборке (не лучший вариант, но тоже имеет место быть):

- libraries:
Объединено

И кстати, вместо companion object лучше сделай просто эти функции вне какого-либо класса. А для метода рассылки сообщения игрокам вокруг попробуй extension-функцию, тоже крутая штука
что то немыслимое для меня, буду джаву юзать :(
 
что то немыслимое для меня, буду джаву юзать :(
Зачем так быстро останавливаться?... Там же просто библиотеку надо добавить. С джавой тоже самое будет, просто чуть-чуть позже (да хотя бы тот же bstats)
 
Зачем так быстро останавливаться?... Там же просто библиотеку надо добавить. С джавой тоже самое будет, просто чуть-чуть позже (да хотя бы тот же bstats)
У меня такое бывает, обычно я очень не люблю иметь дело со сборщиками, библиотеками. Раньше пытался делать один проект-игру на андроиде, брал исходник, там было очень много ошибок Gradle, библиотеки, скорее всего было это из за санкций
 
У меня такое бывает, обычно я очень не люблю иметь дело со сборщиками, библиотеками. Раньше пытался делать один проект-игру на андроиде, брал исходник, там было очень много ошибок Gradle, библиотеки, скорее всего было это из за санкций
и с ними придётся иметь дело, если хочешь этим заниматься. а вообще проблемы могут быть из-за чего угодно, и без логов нереально что-то сказать

а здесь всё просто: ты вместо implementation используй compileOnly на библиотеке kotlin и добавь её в plugin.yml в секцию libraries, главное укажи версию
 
и с ними придётся иметь дело, если хочешь этим заниматься. а вообще проблемы могут быть из-за чего угодно, и без логов нереально что-то сказать

а здесь всё просто: ты вместо implementation используй compileOnly на библиотеке kotlin и добавь её в plugin.yml в секцию libraries, главное укажи версию
Я использовал команды через наследование CommandExecutor
Java:
object MainCommand : CommandExecutor
 
А почему у тебя команда это объект, а не класс?
Потому что я увидел в ролике что у человека написано object, а когда я в главном классе инициализирую команду, вылезает ошибка
Код:
Classifer 'DescCMD' does not have a cimpation object, and thus must be initialized here
Объединено

Или мне нужно метод onCommand сделать compation object?
 
Последнее редактирование:
offtop Я бы не рекомендовал пытаться писать плагины на Котлине по туториалам. Гораздо проще научиться на жаве, а потом, уже освоившись с JVM, Gradle и в целом программированием, переходить на котлин - тогда и туториалы никакие не нужны.
 
offtop Я бы не рекомендовал пытаться писать плагины на Котлине по туториалам. Гораздо проще научиться на жаве, а потом, уже освоившись с JVM, Gradle и в целом программированием, переходить на котлин - тогда и туториалы никакие не нужны.
offtop
Я смотрю туториалы по Spigot на Java, а про Compation object я смотрел видео про "Сравнение Java и Kotlin для Spigot" ну и простой туториал на команду на Kotlin

И вместе с этим учу Kotlin, раньше хотел Джаву, но из за того, что плохо учил, надо было переучивать, я перешел на Kotlin.
 
Назад
Сверху Снизу