कोटलिन ग्रेडल प्लगइन 1.8 लक्ष्य के साथ क्यों नहीं बन सकता है?


97

मेरे पास kotlin 1.2.10 के लिए intellij का उपयोग करके सरलतम ग्रेड प्रोजेक्ट कॉन्फ़िगर है। यहाँ मेरी build.gradle फ़ाइल है:

buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'com.ali'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'kotlin'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

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

और मेरे पास एक सरल जावा इंटरफ़ेस है:

public interface MyMath {
    static int myAbs(int input) {
        return Math.abs(input);
    }
}

जब मैं इस इंटरफ़ेस को आयात करता हूं और कॉल करने का प्रयास करता हूं तो myAbsयह इस त्रुटि के साथ विफल हो जाता है:

Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'

मैंने एक intellij kotlin ऐप बनाया है और यह सही तरीके से काम कर रहा था। क्या यह नए कोटलिन ग्रेडल प्लगइन में बग है?


क्या आपके पास जेडीके 8 है?
ज़ो

हां, और यह समस्या केवल तब होती है जब मैं इंटेलीज में परियोजना का निर्माण करता हूं। टर्मिनल में ढाल ठीक काम करता है!
alisabzevari

आईडीई प्लगइन संस्करण क्या है जो आप उपयोग करते हैं? मैं 1.2.21 प्लगइन के साथ त्रुटि को पुन: उत्पन्न नहीं कर सका। यदि नए ग्रेड और IDE प्लगइन संस्करणों के साथ भी ऐसा होता है, तो आप kotl.in/issue पर एक समस्या दर्ज कर सकते हैं और सटीक चरणों का वर्णन कर सकते हैं जो त्रुटि का कारण बनते हैं
हॉटकी

जवाबों:


182

मुझे लगता है कि यह मैक पर एंड्रॉइड स्टूडियो 3.2 का उपयोग करने वालों के लिए मददगार हो सकता है।

कोटलिन कम्पाइलर टारगेट JVM वर्जन को बदलने के लिए आपको Android Studio -> प्राथमिकताएँ -> कोटलिन कम्पाइलर पर जाना चाहिए और फिर टारगेट से चुनकर टारगेट JVM वर्जन को बदलना चाहिए।

वैसे भी, मुझे अभी भी निम्न त्रुटि मिल रही है

जावा इंटरफेस में स्थिर तरीकों की कॉल JVM लक्ष्य 1.6 में निषिद्ध हैं। '-Jvm- लक्ष्य 1.8' के साथ रिकॉम्पाइल

हल किया

निम्नलिखित को मेरे build.gradle में जोड़ने से समस्या हल हो गई:

android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

इसके और अन्य ग्रेडल विन्यास विकल्पों के बारे में: https://kotlinlang.org/docs/reference/use-gradle.html


कोटलिन ग्रेड डीएसएल के साथ:

import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions

(kotlinOptions as KotlinJvmOptions).apply {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}

21
एंड्रॉइड प्रोजेक्ट्स के लिए, कोटलिन कंपाइलर टारगेट JVM वर्जन को build.gradle में बदलने की जरूरत है, एंड्रॉइड स्टूडियो प्राथमिकताओं में नहीं। एंड्रॉइड स्टूडियो वरीयताओं में परिवर्तन कमांड-लाइन बिल्ड को प्रभावित नहीं करेगा।
२०

1
इसके लिए शुक्रिया, बहुत मदद @yole
Curyous

इसके लिए धन्यवाद, बड़ी मदद,
लॉटोसिन

2
कूल, यह मदद करता है! और यह है appढाल btw।
वेसली

2
क्या इसे root build.gradle फ़ाइल में सेट करना संभव है? यह एक बहु-मॉड्यूल परियोजना में मॉड्यूल भर में थकाऊ प्रबंधन है।
रोबॉटक्विवर्डवर्ड

77

यह पता चला कि यह इंटेलीज सेटिंग्स में मेरा कोटलिन कंपाइलर कॉन्फ़िगरेशन था। में Settings > Build, Execution, Deployment > Compiler > Kotlin Compilerएक सेटिंग बुलाया Target JVM version1.8 करने के लिए सेट किया जाना चाहिए था।


3
मेरे संस्करण में यह हैSettings -> Other Settings -> Kotlin Compiler -> Target JVM Version
ElyashivLavi

6
लेकिन १. even पर सेट होने के बाद भी, मुझे अभी भी मिलता हैCalls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
एल्याशिवलावी

मेरे पास नहीं है Other Settings!
अलिस्बेजवारी

39
मेरे मामले में मैं इसे ठीक करता हूंProject Structure -> Facets -> Kotling -> Target Platform
पाब्लो बस्तीदास

वास्तव में, मैंने उपरोक्त सभी और कोई भी संदेश सेट नहीं किया ... अभी तक। IJ 2018.1.5 कोटलिन 1.2.50।
सॉफ्टजेक

21

कृपया देखें कि क्या आपके पास निम्नलिखित तीन सामान सेट हैं:

  1. बिल्ड.ग्रेडल में कोटलिन विकल्प
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. प्रासंगिक आइडिया वरीयताओं की जाँच करें पसंद

  2. प्रोजेक्ट के पहलुओं की जाँच करें यहां छवि विवरण दर्ज करें


16

कोटलिन प्लगइन द्वारा उपयोग की जाने वाली एक ढाल संपत्ति है जिसका उपयोग किया जा सकता है। जब आप जोड़ते हैं

kotlin.setJvmTargetFromAndroidCompileOptions = true

आपकी gradle.propertiesफ़ाइल पर। जब आपके पास यह विन्यास हैbuild.config

android{
  compileOptions {
      sourceCompatibility = 1.8
      targetCompatibility = 1.8
  }
}

समस्या का समाधान किया जाना चाहिए।


जिस प्रोजेक्ट पर मैं काम कर रहा था, वह कॉन्फ़िगर किया गया था sourceCompatibility , targetCompatibilityलेकिन kotlin.setJvmTargetFromAndroidCompileOptions = trueमेरे लिए हल की गई समस्या को जोड़ते हुए
Fdo

6

// बस अपने बिल्ड ग्रेडेल में नीचे कोड जोड़ें (मॉड्यूल: ऐप)

compileOptions {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
 }

2

यह भी परियोजना सेटिंग्स में, के तहत निर्धारित है Project Settings > Modules > Kotlin। यह मेरी विशिष्ट समस्या थी ... वस्तुतः आखिरी कोशिश मैंने की।


2

यह मेरे लिए ग्रेडिन में कोटलिन DSL के साथ काम किया:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()

1

यह निश्चित नहीं है कि यह क्यों काम करता है, लेकिन आप आइडिया में ही सेटिंग बदलने की कोशिश कर सकते हैं। चूंकि कमांड लाइन से ग्रैडल काम करता है, लेकिन इंटेलीज से निर्माण करते समय ऐसा नहीं होता है।

फाइल -> प्रोजेक्ट स्ट्रक्चर पर जाएं। प्रोजेक्ट टैब पर जाएं और सुनिश्चित करें कि प्रोजेक्ट एसडीके 8 (या नया) है और Project language levelजावा 8 पर सेट करें

यहां छवि विवरण दर्ज करें

वहाँ का विन्यास किसी कारण से ग्रैड को ओवरराइड करने लगता है, इसलिए इसे बदलते हुए काम करना चाहिए


यह मेरे intellij में 8 है!
alisabzevari

कैश को पुनः आरंभ करने और पुनः आरंभ करने का प्रयास करें
ज़ो

काम नहीं किया। मेरे पास पुराने इंटेलीज के साथ बनाया गया एक प्रोजेक्ट है (वर्तमान 2017.3.4 है)। पुराना काम कर रहा है। मैं एक दूसरे के साथ दो परियोजना के .idea फ़ोल्डरों की तुलना कर रहा हूं। क्या इस का कोई मतलब निकलता है?
अलिस्बाववारी

2
मैं एक maven परियोजना पर एक ही त्रुटि थी। बस गुण अनुभाग में <kotlin.compiler.jvmTarget> 1.8 </kotlin.compiler.jvmTarget> जोड़कर हल किया गया। अधिक जानकारी के लिए यहाँ देखें youtrack.jetbrains.com/issue/KT-17492
पाओलो

"प्रोजेक्ट भाषा स्तर" सेटिंग यह नियंत्रित करती है कि आईडीई में जावा स्रोत कोड कैसे हाइलाइट किया गया है। कोटलिन संकलन पर इसका कोई प्रभाव नहीं पड़ा है।
२०

1

सेटिंग्स> बिल्ड, एक्ज़ीक्यूशन, परिनियोजन> कंपाइलर> कोटलिन कंपाइलर एक सेटिंग जिसे लक्ष्य JVM संस्करण कहा जाता है, उसे 1.8 पर सेट किया जाना चाहिए।


0

मेरे मामले में, मैंने टिप्पणी में दिए गए सभी @alisabzevari विकल्पों की कोशिश की, लेकिन यह काम नहीं किया,

मेरी गलती से मैंने जावा फाइल को भी src/<sourcset_name>kotlin/फ़ोल्डर में जोड़ा , बाद में मैंने जावा फाइल को कोटलिन फाइल में बदल दिया। और वोइला! यह काम करता हैं।

हो सकता है यह किसी की मदद करे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.