Mã byte nội tuyến không thể được xây dựng với mục tiêu JVM 1.8 thành mã byte đang được xây dựng với mục tiêu JVM 1.6


484

Khi thử chạy Ví dụ CorDapp ( https://github.com/corda/cordapp-example ) qua IntelliJ, tôi nhận được lỗi sau:

Mã byte nội tuyến không thể được xây dựng với mục tiêu JVM 1.8 thành mã byte đang được xây dựng với mục tiêu JVM 1.6

Làm cách nào tôi có thể sửa đổi cài đặt IntelliJ để tất cả mã byte được xây dựng với cùng một mục tiêu JVM?


5
Tôi đã có thể giải quyết vấn đề này bằng cách thêm thư viện này vào build.gradlephụ thuộc {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel

1
@MunishChandel Điều đó là không đủ. Chúng ta cũng phải làm những gì câu trả lời dưới đây gợi ý ...
IgorGanapolsky

Câu trả lời:


1033

ứng dụng / build.gradle

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

GL

Sử dụng các tính năng ngôn ngữ Java 8


31
Đây phải là giải pháp kiểm tra.
Phil

9
Kể từ ngày này và Android Studio v3.5, đây là giải pháp duy nhất có hiệu quả, sau khi thử tất cả các phần còn lại. Điều kỳ lạ là thiết lập cùng một giá trị trong Cài đặt> Trình biên dịch Kotlin không có hiệu lực.
dùng3399299

53
Chỉ cần là kotlinOptions { jvmTarget = "1.8" }đủ.
petter

2
đã làm việc và câu trả lời là tự giải thích và được viết chính xác
Vikas Pandey

4
Sau đó nên "vô hiệu hóa bộ đệm và khởi động lại"
B-GangsteR

214

Bạn có thể khắc phục vấn đề này như sau:

  • Mở tùy chọn IntelliJ
  • Tới Build, Execution, Deployment> Compiler> Kotlin Compiler NHƯNG Other Settings > Kotlin compilernếu Android Studio>3.4
  • Thay đổi Target JVM versionthành1.8
  • Nhấp chuột Apply

6
Tôi đã cài đặt cài đặt này thành 1.8, nhưng tôi vẫn thấy lỗi này khi bước qua các điểm dừng. Tôi chủ yếu nhìn thấy điều này khi nhấn truy vấn vault. Bất kỳ đề nghị thêm? Có vẻ như bit JVM mục tiêu này không khắc phục hoàn toàn.
Arsalan Khalid

38
Trên Cấu trúc dự án của bạn , đảm bảo bạn cũng thay đổi Target platformthành JVM 1.8 trên KotlinFacet của bạn trong Generaltab.
Anyul Rivas 27/07/18

7
Lỗi này có thể xuất hiện nếu có một phụ thuộc chưa được giải quyết !
chương trình

5
Đối với tôi các Kotlin Compilercài đặt đã thực sự được đặt trong Other Settingsphần.
qwertyfinger

10
Nếu khởi động lại sau khi áp dụng là không đủ → Khởi động lại & bộ đệm không hợp lệ.
Bartek Lipinski

104

bạn nên cấu hình một cái gì đó như sau trong build.gradle

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

14
Hoặc cách khác, trong DSL của Kotlin Gradle:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan

Bất kỳ ý tưởng làm thế nào để có được điều này để làm việc với kotlin-androidplugin?
ZeroDivide ngày

Hoạt động mà không gặp nhiều rắc rối. Tôi muốn giới thiệu nó
Mitch

Tôi đã có cái này trong build.gradle, nhưng bằng cách nào đó IDEA đã ghi đè cài đặt này. Câu trả lời từ Saeed đã làm việc cho tôi.
nils petersohn

Hãy thêm phần này vào phần Android {} cấp độ ứng dụng của bạn.
Parag Kadam

80

Trong trường hợp của tôi, chỉ cần thay đổi Phiên bản JVM như thế này: Tệp> Cài đặt> Trình biên dịch Kotlin> Phiên bản JVM mục tiêu> 1.8 không giúp ích gì. Tuy nhiên, nó đã giải quyết lỗi thời gian biên dịch. Nhưng thất bại trong thời gian chạy.

Tôi cũng đã phải thêm vào sau trong tập tin build.gradle để làm cho nó hoạt động.

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }

2
làm việc một sự quyến rũ. cảm ơn
dave o grady

làm! cảm ơn bạn
Waldmann

55

Khi các giải pháp khác không hiệu quả với bạn (Thay đổi phiên bản JVM trên cài đặt Trình biên dịch và thêm jvmTargetvào của bạn build.gradle), vì các .imltệp của bạn đang cố gắng cấu hình chúng, bạn có thể thay đổi nền tảng đích từ Cài đặt dự án.

  • Mở File > Project Structure
  • Đi đến Facetsbên dướiProject Settings
    • Nếu nó trống thì bấm vào +nút nhỏ
  • Nhấp vào mô-đun / mô-đun Kotlin của bạn
  • Thay đổi Target Platformthành JVM 1.8(cũng tốt hơn để kiểm tra Use project settingstùy chọn)

3
Tôi không thể tìm thấy phần này hoặc phần 'khía cạnh' trong Android Studio ... Tôi phải chỉnh sửa app.iml bằng tay. Tôi đặt <configuration version="3" platform="JVM 1.8" useProjectSettings="false">để truevà nó làm việc. Tuy nhiên, các tập tin tiếp tục thay đổi trở lại!
Aphex

1
@Aphex Nó thực sự nằm trong "Tệp"> "Cấu trúc dự án" sau đó trong "Cài đặt dự án"> "Khía cạnh", tôi không có gì ở đó, vì vậy tôi đã chọn "+"> "Kotlin"> Chọn dự án của tôi. Điều đó đã làm điều đó cho tôi :)
Nicolas Guillaume

Điều này làm việc cho tôi, nhưng bị buộc trở lại 1.6 mỗi lần tôi thêm vào tệp build.gradle.kts của mình.
Lou Morda

Có cách nào để cấu hình và chọn từ tệp gradle này không? IMHO điều này được cấu hình sai là một lỗi trong intellij.
Jilles van Gurp

35

Trong trường hợp của tôi, mã này đã không hoạt động cho đến khi tôi chuyển apply plugin: 'kotlin-android'từ dưới lên trên.

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

kotlinOptions {jvmTarget = "1.8"} Didi là mẹo cho tôi, thx
Didi

32

Trong Android Studio 4.3.2, việc thêm vào thông qua quy trình dưới đây không hoạt động.

  1. Mở tùy chọn IntelliJ
  2. Chuyển đến Xây dựng, Thực thi, Triển khai > Trình biên dịch > Trình biên dịch Kotlin NHƯNG Cài đặt khác> Trình biên dịch Kotlin nếu Android Studio> 3.4
  3. Thay đổi phiên bản JVM mục tiêu thành 1.8
  4. Nhấp vào Áp dụng

Lý do là, studio Android không thể thêm mã dưới đây vào tệp Gradle cấp mô-đun. Vui lòng thêm nó bằng tay.

kotlinOptions {
    jvmTarget = "1.8"
}

Chỉ cần cho addon, tìm kiếm phiên bản Target JVM trong tìm kiếm studio android. Nó sẽ đưa bạn trực tiếp đến tùy chọn. nhập mô tả hình ảnh ở đây


chỉ bằng cách thêm thủ công, nó làm việc cho tôi. Vì một số lý do, android studio thực sự có lỗi và nó không xem xét các thay đổi được áp dụng trừ khi chúng tôi khởi động lại ide bằng cách xóa tất cả bộ đệm.
Karan Sharma

28

một bưc tranh đang gia ngan lơi noi

một bưc tranh đang gia ngan lơi noi


Ngoài ra tìm kiếm trong bảng cài đặt sẽ đưa ra tùy chọn này. Cảm ơn vì điều này thực sự hữu ích!
Princeps Polycap

đã không giúp tôi
Waldmann

26

Tháng 2 năm 2020
android 3.4+
Chuyển đến Tệp -> Cài đặt -> Trình biên dịch Kotlin -> Phiên bản JVM mục tiêu> được đặt thành 1.8 và sau đó đảm bảo thực hiện Tệp -> Dự án đồng bộ hóa với các tệp Gradle

Hoặc thêm phần này vào build.gradle (mô-đun: ứng dụng) trong khối Android :

kotlinOptions {
           jvmTarget = "1.8"
         }

chỉ "Dự án đồng bộ hóa với các tệp Gradle" hoạt động với tôi ..
Akash Bisariya

xác nhận rằng bạn cần thực hiện Tệp -> Dự án đồng bộ hóa với các tệp Gradle, sau đó nó hoạt động
Irfandi D. Vendy

19

Vì nó được viết trong các tài liệu sử dụng từ trang web của Kotlin:

Bạn chỉ cần đưa <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>vào phần thuộc tính của tệp pom.xml của bạn


19

Nếu bạn có nhiều nguồn / mô-đun, việc định cấu hình jvmTarget cho từng loại riêng lẻ có thể rất phức tạp.

Bạn có thể định cấu hình jvmTarget cho tất cả chúng cùng một lúc như vậy:

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

Đoạn mã này có thể được sử dụng ở cấp cao nhất của tệp gradle.build của bạn

Sau khi sửa đổi tập tin gradle Reimport All Gradle Imports. Để kiểm tra xem nó có hoạt động không, hãy mở Project Structurevà xác minh rằng IntelliJ được gán chính xác JVM 1.8cho tất cả các Mô-đun Kotlin. Nó sẽ giống như thế này:

cấu trúc dự án

Tôi không khuyên bạn nên thay đổi nền tảng trực tiếp trong IntelliJ, bởi vì bất kỳ ai khác nhân bản dự án của bạn lần đầu tiên đều có thể phải đối mặt với cùng một vấn đề. Định cấu hình chính xác trong lớp có lợi thế là IntelliJ sẽ hành xử đúng với họ ngay từ đầu.


16

Trong trường hợp của tôi, tôi đã giải quyết điều này bằng cách làm theo hai bước sau

1. Go to android studio preferences -> other settings -> kotlin compiler -> set Target JVM version = 1.8 
   if it doesn't work then go to the second option.

2. In your module-level build.gradle file add 
   compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }

Xin cảm ơn vì câu trả lời, tôi phải thực hiện bước thứ 2 và nó đã hoạt động. Bạn có thể giải thích tại sao nó cần thiết?
hushed_voice

bạn có thể tìm thêm chi tiết về vấn đề đã đóng này, thật tốt khi biết [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

Liên kết đó đã chết
hushed_voice

12

Đối với tôi lý do là cấu hình này trong lớp xây dựng của tôi là ở một số mô-đun và trong một số mô-đun thì không

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {

1
Cảm ơn, đây là giải pháp duy nhất hiệu quả với tôi. Tôi đang sử dụng tập tin kts buiild.
Krames

Cảm ơn, đây cũng là giải pháp hiệu quả với tôi. Và khai báo nhiều theo cách này. stackoverflow.com/a/57041765/3763032 kevin cũng tuyên bố này, do sự SmartCast trong Kotlin file gradle .kts nó có sẵn trực tiếp
mochadwi

12

Đối với Gradle với ngôn ngữ Kotlin ( *.gradle.ktstệp), hãy thêm phần này:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}

Tại sao chúng ta cần phải cast thisđể KotlinJvmOptions. Không phải là thisngười nhận trong kotlinOptionskhối rồi KotlinJvmOptionssao? Tuy nhiên, nó không hoạt động đối với tôi mà không có diễn viên
11m0

1
@ 11m0, tôi nghĩ nó liên quan đến vấn đề này: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

Khi không tìm thấy KotlinJvmOptions, hãy thử sử dụng tên đầy đủ "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW

4

trong hầu hết các trường hợp, điều này là đủ:

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

nếu bạn đã khai báo các tác vụ Gradle tùy chỉnh như integrationTeství dụ, hãy thêm một cấu hình cho compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

điều này cũng hoạt động bằng cách thêm vào tập tin gradle -> compileOptions {sourceCompabilities = 1.8 targetCompabilities = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

thật thú vị, chỉ có giải pháp của bạn làm việc với mô-đun không phải Android của tôi! cảm ơn!
Mohammad Omidvar

4

Cài đặt sourceCompatibility = JavaVersion.VERSION_1_8cho phép giải mã, nhưng hiện tại không thể giải mã tất cả các tính năng Java 8 mà trình biên dịch Kotlin sử dụng.

nhập mô tả hình ảnh ở đây

Khắc phục - Cài đặt kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8trong mô-đun ứng dụng Gradle sẽ khắc phục sự cố.

Sử dụng các tính năng ngôn ngữ Java 8: https://developer.android.com/studio/write/java8-support

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

3

Tất cả các câu trả lời ở đây đều sử dụng gradle nhưng nếu ai đó như tôi kết thúc ở đây và cần câu trả lời cho maven:

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmTarget>11</jvmTarget>
                </configuration>
            </plugin>
        </plugins>
    </build>

Sự thay đổi từ archetype jetbrains cho kotlin-jvm là <configuration></configuration>chỉ định jvmTarget. Trong trường hợp của tôi 11


3

Không có gì làm việc cho tôi cho đến khi tôi cập nhật phụ thuộc plugin kotlin của mình.
Hãy thử điều này:
1. Vô hiệu hóa cahce và khởi động lại.
2. Dự án đồng bộ hóa (ít nhất là cố gắng)
3. Truy cập tệp -> Cấu trúc dự án -> Gợi ý
4. Nếu có bản cập nhật liên quan đến Kotlin, hãy cập nhật nó.
Hy vọng nó sẽ giúp được ai đó.


Cách khắc phục dễ dàng nhất
u84six

2

Nếu sử dụng Visual Studio Code ** với tiện ích mở rộng Kotlin, hãy chuyển đến quản lý plugin Crtl + Shift + x, nhập kotlin và nhấp vào quản lý (thiết bị nhỏ) >> Cấu hình Cài đặt tiện ích mở rộng

trên Kotlin >> Trình biên dịch >> Jvm: Target - nhập phiên bản java. Trong tình huống của tôi chỉ cần gõ 1.8

Và sau đó khởi động lại :-)

** vscode hoặc chỉ là 'mã' cho linux


2

Trong trường hợp của tôi Tệp> Cài đặt> Trình biên dịch Kotlin> Phiên bản JVM mục tiêu> 1.8


2

Tôi đang sử dụng Kotlin và Gradle để phát triển JVM bình thường, (không phải Android) và điều này đã làm việc cho tôi trong build.gradle:

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}

1

Nếu bạn sử dụng Eclipse, giả sử bạn đã tải xuống plugin Kotlin:

Dự án nhấp chuột phải -> Thuộc tính -> Trình biên dịch Kotlin -> Bật cài đặt cụ thể của dự án -> Phiên bản mục tiêu JVM "1.8"


1

Đối với các phiên bản gần đây của Android Studio, nếu chỉ thay đổi phiên bản VM Target Target thì không hoạt động.

Tệp Structure Cấu trúc dự án Mô-đun ( app): đặt cả "Tương thích nguồn" và "Tương thích mục tiêu" thành "1.8 (Java 8)". Nhấn "OK" và đồng bộ hóa dự án với Gradle.


1

nếu bạn đang ở trong dự án Android

trong build.gradle của ứng dụng của bạn trong Android {}

android{
//other configs...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

1

Sử dụng DSL Kotlin Gradle, điều này đã giải quyết vấn đề cho tôi. Tôi đã thêm cái này vào build.gradle.kts. Đây là ngoài câu trả lời của Joel

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()

1
Bạn có thể vui lòng chia sẻ chính xác nơi bạn đặt tập tin này không? Và phiên bản nào của plugin android và gradle bạn đang sử dụng?
cây xanh

Đây không phải là một dự án Android. Tôi đang chạy Lớp 6.4.
Briantical

0

Một gợi ý khác cho người dùng Eclipse. Sau khi kiểm tra kỹ các cài đặt mục tiêu jvm được chỉ ra bởi những người dùng khác, tôi vẫn gặp vấn đề tương tự và đó là do Thư viện Thời gian chạy Kotlin bị thiếu. Ví dụ, khi tạo một dự án với spring initizr, nó không được thêm tự động. Để thêm nó: right click on your project -> Build path -> Add libraries... -> User Libraryvà chỉ cần thêmorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Hãy chắc chắn rằng bạn làm mới dự án gradle của bạn sau đó ( right click -> Gradle -> Refresh gradle project)


0

Nếu bạn phải đối mặt với thông báo này trong dự án Spring Boot / Kotlin, chỉ cần đặt thuộc tính "kotlin.compiler.jvmTarget" thành "1.8" trong tệp pom.xml của bạn.

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...

0

Trong trường hợp của tôi, jvmTarget đã được đặt trong build.gradletệp như bên dưới.

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

Nhưng vấn đề của tôi vẫn còn đó. Cuối cùng, nó được giải quyết sau khi thay đổi phiên bản JVM mục tiêu từ 1.6 thành 1.8 trong Tùy chọn> Cài đặt khác> Trình biên dịch Kotlin> Phiên bản JVM mục tiêu. xem hình đính kèm,

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.