Kotlin всегда говорит мне KotlinReflectionNotSupportedError - PullRequest
0 голосов
/ 04 января 2019

Я только начал конвертировать в Kotlin с Java. У меня есть вопрос: когда я отражаю что-то вроде: XXClass::class.java или что-нибудь еще. Они не работают в JAR , но отлично работают из IDE.

Я использую gradle :module:build или gradle :module:jar для создания файла JAR. После генерации он всегда говорит мне KotlinReflectionNotSupportedError: Kotlin reflection implementation is not found at runtime. Make sure you have kotlin-reflect.jar in the classpath. Но я уже добавил их в зависимости, и они отлично работают в IDE.

Это части моих файлов Gradle (Обратите внимание, что это модуль приложения kotlin, а не модуль Android):

// (Module level)
apply plugin: 'kotlin'
sourceCompatibility = 1.8
dependencies {
    // Others...
    // I've already added reflect and stdlib
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}

jar {
    manifest {
        // ...
    }

    // To include dependencies to build a fat jar
    from {
        configurations.compile.collect { 
            it.isDirectory() ? it : zipTree(it) 
        }
    }
}

// Include reflect and stdlib
compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
        javaParameters = true
        noReflect = false
        noStdlib = false
    }
}

// (Project level)
buildscript {
    ext.kotlin_version = '1.3.11'
    repositories {
        // ...
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

Кто-нибудь может мне помочь? Большое спасибо.

1 Ответ

0 голосов
/ 22 марта 2019

Проблема в этом блоке скрипта

        configurations.compile.collect { 
            it.isDirectory() ? it : zipTree(it) 
        }

Вы включили зависимости (kotlin-refle), используя реализацию конфигурации, но собирая зависимости из compile конфигурации. Если вы изменили конфигурацию с реализации на компиляцию, этот блок будет работать. Поскольку compile устарела, вы можете попробовать что-то вроде этого, чтобы собрать свои зависимости в jar

        compileJava.classpath.collect {
            it.isDirectory() ? it : zipTree(it)
        }

смотри ответ

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