কোটলিন গ্রেডেল প্লাগইন কেন 1.8 টার্গেট দিয়ে তৈরি করতে পারে না?


93

আমি কোটলিন 1.2.10 এর জন্য ইন্টেলিজ ব্যবহার করে সবচেয়ে সহজ গ্রেডেল প্রকল্পটি কনফিগার করেছি। এখানে আমার বিল্ড.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'

আমি একটি ইন্টেলিজ কোটলিন অ্যাপ তৈরি করেছি এবং এটি সঠিকভাবে কাজ করছে। এটি কি নতুন কোটলিন গ্রেডল প্লাগইনে একটি বাগ আছে?


আপনার জেডিকে 8 আছে?
জো

হ্যাঁ, এবং এই সমস্যাটি তখনই ঘটে যখন আমি প্রকল্পটি ইন্টেলিজে তৈরি করি। টার্মিনালে গ্রেড ভাল কাজ করে!
এলিসাবেজেয়ারি

আপনি যে আইডিই প্লাগইন সংস্করণটি ব্যবহার করেন তা কী? আমি 1.2.21 প্লাগইন দিয়ে ত্রুটিটি পুনরুত্পাদন করতে পারিনি। এটি যদি নতুন গ্রেডল এবং আইডিই প্লাগইন সংস্করণগুলির সাথেও ঘটে থাকে তবে আপনি কোটল.ইন.ইস.আইসুতে একটি সমস্যা দায়ের করতে পারেন এবং ত্রুটির দিকে নিয়ে যাওয়ার সঠিক পদক্ষেপগুলি বর্ণনা করতে পারেন।
হটকি

উত্তর:


179

আমি মনে করি এটি ম্যাকে অ্যান্ড্রয়েড স্টুডিও ৩.২ ব্যবহার করে তাদের পক্ষে সহায়ক হতে পারে।

কোটলিন সংকলক টার্গেট জেভিএম সংস্করণ পরিবর্তন করতে আপনার অ্যান্ড্রয়েড স্টুডিওতে যেতে হবে -> পছন্দসমূহ -> কোটলিন সংকলক এবং তারপরে ড্রপডাউন থেকে বেছে নেওয়া লক্ষ্য জেভিএম সংস্করণ পরিবর্তন করা উচিত।

যাইহোক, আমি এখনও নিম্নলিখিত ত্রুটি পেয়েছি

জাভা ইন্টারফেসে স্থির পদ্ধতিতে কলগুলি JVM টার্গেট 1.6 তে নিষিদ্ধ। '-Jvm- লক্ষ্য 1.8' এর সাথে পুনরায় রচনা করুন

সলভড

আমার বিল্ড.gradle এ নিম্নলিখিতগুলি যুক্ত করা সমস্যার সমাধান করেছে:

android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

এটি এবং অন্যান্য গ্র্যাডল কনফিগারেশন বিকল্পগুলি: https://kotlinlang.org/docs/references/used-gradle.html


কোটলিন গ্রেডল ডিএসএল সহ:

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

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

20
অ্যান্ড্রয়েড প্রকল্পগুলির জন্য, কোটলিন সংকলক লক্ষ্যযুক্ত জেভিএম সংস্করণটি অ্যান্ড্রয়েড স্টুডিও পছন্দগুলিতে নয়, বিল্ড.gradle এ পরিবর্তিত হওয়া দরকার। অ্যান্ড্রয়েড স্টুডিও পছন্দসমূহের পরিবর্তনগুলি কমান্ড-লাইন বিল্ডগুলিকে প্রভাবিত করবে না।
ইয়েল

4
এর জন্য আপনাকে ধন্যবাদ, ইউওল
কুরিয়াস

এর জন্য ধন্যবাদ, দুর্দান্ত সাহায্য
লোটোসবিন

4
শীতল, এটি সাহায্য করে! এবং এটি appগ্রেড বিটিডব্লিউ।
উইসেলি

4
মূল বিল্ড.gradle ফাইল এ এটি সেট করা সম্ভব? এটি একাধিক-মডিউল প্রকল্পের মডিউল জুড়ে এটি পরিচালনা করা ক্লান্তিকর।
রোবটসকিউওয়ার্ড

75

দেখা গেল এটি ইন্টেলিজ সেটিংসে আমার কোটলিন সংকলক কনফিগারেশন। ইন Settings > Build, Execution, Deployment > Compiler > Kotlin Compilerএকটি সেটিং নামক Target JVM version1.8 এ সেট করা উচিত ছিল।


4
আমার সংস্করণে এটি এতে রয়েছেSettings -> Other Settings -> Kotlin Compiler -> Target JVM Version
এলিয়াশিবলভি

6
তবে 1.8 এ সেট করা হলেও আমি এখনও পেয়েছি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
পাবলো বাস্তিদাস

প্রকৃতপক্ষে, আমি উপরের সমস্তটি সেট করেছি এবং কোনও বার্তা ... এখনও নেই। আইজে 2018.1.5 কোটলিন 1.2.50।
সফটজাকে

21

আপনার যদি নীচে তিনটি জিনিস সেট করা আছে কিনা তা পরীক্ষা করে দেখুন:

  1. বিল্ড.gradle এ কোটলিন বিকল্পগুলি
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. সম্পর্কিত আইডিয়া পছন্দগুলি পরীক্ষা করুন Check পছন্দসমূহ

  2. প্রকল্পের দিকগুলি পরীক্ষা করুন এখানে চিত্র বর্ণনা লিখুন


16

কোটলিন প্লাগইন ব্যবহার করে একটি গ্রেড সম্পত্তি রয়েছে যা ব্যবহার করা যেতে পারে। আপনি যুক্ত করার সময়

kotlin.setJvmTargetFromAndroidCompileOptions = true

আপনার gradle.propertiesফাইল আপনার যখন এই কনফিগারেশনটি থাকেbuild.config

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

সমস্যা সমাধান করা হবে।


আমি যে প্রকল্পে কাজ করেছিলাম সেটি ছিল sourceCompatibility এবং targetCompatibilityকনফিগার করা ছিল তবে kotlin.setJvmTargetFromAndroidCompileOptions = trueআমার জন্য সমস্যার
সমাধানটি যুক্ত

6

// আপনার বিল্ড গ্রেডিতে কেবল নীচের কোডটি যুক্ত করুন (মডিউল: অ্যাপ)

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

1

এটি কেন কাজ করে তা পুরোপুরি নিশ্চিত নয় তবে আপনি নিজেই আইডিয়ায় সেটিংস পরিবর্তন করার চেষ্টা করতে পারেন। যেহেতু কমান্ড লাইন থেকে গ্রেডল কাজ করে, তবে ইন্টেলিজ থেকে বিল্ডিংয়ের সময় নয় এটি সম্ভবত এটির মূল।

ফাইল -> প্রকল্পের কাঠামোতে যান। প্রকল্প ট্যাবে যান এবং নিশ্চিত করুন যে প্রকল্প এসডিকে 8 (বা আরও নতুন) এবং Project language levelজাভা 8 এ সেট করুন

এখানে চিত্র বর্ণনা লিখুন

সেখানকার কনফিগারটি কোনও কারণে গ্রেডলকে ওভাররাইড করে বলে মনে হচ্ছে, সুতরাং এটির পরিবর্তনের কাজ করা উচিত


এটা আমার ইন্টেলিজ এ 8!
এলিসাবেজেয়ারি

ক্যাশেগুলি অবৈধ করে পুনরায় চালু করার চেষ্টা করুন
জো

কাজ হয়নি। আমি পুরানো ইন্টেলিজ (বর্তমান 2017.3.4) নিয়ে একটি প্রকল্প তৈরি করেছি। পুরানো কাজ করছে। আমি একে অপরের সাথে দুটি প্রকল্পের .idea ফোল্ডার তুলনা করছি। এটা কি কোন মানে আছে?
এলিসাবেজেয়ারি

4
কোনও মাভেন প্রকল্পে আমারও একই ত্রুটি ছিল। সম্পত্তি বিভাগে <কোটলিন.কম.পাইল.আরভিএমআরটেট> ১.৮ </ quotlin.compiler.jvmTarget> যুক্ত করার সমাধান হয়েছে। আরও তথ্যের জন্য youtrack.jetbrains.com/issue/KT-17492 এখানে একবার দেখুন
Paolo

"প্রকল্পের ভাষা স্তর" সেটিংস আইডিইতে জাভা উত্স কোডটি কীভাবে হাইলাইট করা হয় তা নিয়ন্ত্রণ করে। কোটলিন সংকলনে এটির কোনও প্রভাব নেই।
ইয়েল

1

এটি প্রকল্পের সেটিংসেও অন্তর্ভুক্ত রয়েছে Project Settings > Modules > Kotlin। এটি ছিল আমার সুনির্দিষ্ট সমস্যা ... আক্ষরিক অর্থেই আমি শেষ চেষ্টা করেছি।


1

কোটলিন ডিএসএলের সাথে গ্র্যাডলে এটি আমার জন্য কাজ করেছিল:

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

0

আমার ক্ষেত্রে, আমি মন্তব্যগুলিতে দেওয়া সমস্ত @ লিবিজেজেয়ারি বিকল্পগুলি চেষ্টা করেছিলাম, কিন্তু এটি কার্যকর হয়নি,

আমার ভুল আমি জাভা ফাইলও যুক্ত করেছিলাম src/<sourcset_name>kotlin/ ফোল্ডারেও যুক্ত করেছি, পরে আমি জাভা ফাইলটি কোটলিন ফাইলে রূপান্তর করেছি। এবং ভোইলা! এটা কাজ করে।

হতে পারে এটি কারও সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.