2016-12-13 5 views
16

कोटलिन प्रोजेक्ट में, यह सुनिश्चित करने के लिए कि मेरी कक्षाएं बाइट कोड वर् 52 (जावा 8) में संकलित हों, उचित ग्राडल स्क्रिप्ट क्या है?ग्राडल प्रोजेक्ट में कोटलिन के बाइट कोड संस्करण को जावा 8 में कैसे सेट अप करें?

किसी कारण से मेरी कक्षाएं वर्क 50 (जावा 6) के रूप में संकलित की गई हैं, भले ही मैंने स्रोत और लक्ष्य संगतता स्थापित की हो। परियोजना के निर्माण के बाद निर्देशिका build/classes/... से फ़ाइल खोलते समय कम से कम यह विचार मुझे दिखाता है।

मेरा वर्तमान सेट इस तरह दिखता है।

buildscript { 
    ext { 
     kotlinVersion = '1.0.5-2' 
     springBootVersion = '1.4.2.RELEASE' 
    } 
    repositories { mavenCentral() } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") 
    } 
} 

apply plugin: 'kotlin' 
apply plugin: 'org.springframework.boot' 

tasks.withType(JavaCompile) { 
    sourceCompatibility = JavaVersion.VERSION_1_8 
    targetCompatibility = JavaVersion.VERSION_1_8 
} 

## I also tried this and it hasn't helped 
#sourceCompatibility = 1.8 
#targetCompatibility = 1.8 

repositories { mavenCentral() } 

dependencies { 
    compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") 
    compile('org.springframework.cloud:spring-cloud-starter-stream-rabbit') 
} 

dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2" } } 

उत्तर

11

मार्क ने डेबॉप के उत्तर पर ध्यान दिया, आपको compileKotlin और compileTestKotlin दोनों को कॉन्फ़िगर करना होगा। आप इसे दोहराव के बिना इस तरह से कर सकते हैं:

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

एक शुद्ध Kotlin परियोजना के लिए, मैं विकल्पों sourceCompatibility और targetCompatibility कुछ भी नहीं लगता है, तो आप उन्हें हटाने के लिए सक्षम हो सकता है।

रेफरी: https://kotlinlang.org/docs/reference/using-gradle.html#compiler-options

6

कोटलिन 1.0 हमेशा जावा 6 क्लास फाइलें उत्पन्न करता है। कोटलिन 1.1 कंपाइलर को -jvm-target 1.8 पास करके जावा 8 कक्षा फ़ाइलों को उत्पन्न करने का समर्थन करेगा। जावा 7/8 समर्थन की एक चर्चा के लिए

https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of-kotlin-1-1-coroutines-type-aliases-and-more/

देखें।

18

ग्रैडल में कोटलिन 1.1। कंसोल में आप inline के बारे में त्रुटि है IntelliJ विचार में चला Gradle कार्य, अपने कोड kotlin 1.1 संकलक

compileKotlin { 
    sourceCompatibility = JavaVersion.VERSION_1_8 
    targetCompatibility = JavaVersion.VERSION_1_8 

    kotlinOptions { 
     jvmTarget = "1.8" 
     apiVersion = "1.1" 
     languageVersion = "1.1" 
    } 
} 
+4

लग रहा है परीक्षण कोड अगर मैं इसके बारे में गलत हूं, हालांकि, मैं इसके बारे में जानना चाहता हूं और क्यों। – Mark

1

द्वारा संकलित हैं मेरे जैसे किसी को जो Maven का उपयोग मिश्रित कोड का निर्माण करने के लिए (अपने स्थापित संकलक 1.0.x है) kotlin और IntelliJ में जावा की, आप

<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget> 

स्थापित करने के लिए है क्योंकि Maven निर्माण परियोजना की स्थापना में jvmTarget सेट सम्मान नहीं करता है की जरूरत है।

+0

किस फाइल को यह सेट किया जाना चाहिए? गुणों के तहत –

+0

आप Pom.xml में। – happy15

7

मामले में किसी के बजाय kotlin-डीएसएल साथ Gradle का उपयोग करता ग्रूवी की: की तरह आप भी करने के लिए इस config लागू करने के लिए एक compileTestKotlin ब्लॉक में इस नकल करने की आवश्यकता हो सकती

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 

// compile bytecode to java 8 (default is java 6) 
tasks.withType<KotlinCompile> { 
    kotlinOptions.jvmTarget = "1.8" 
} 
संबंधित मुद्दे