Não é possível bytecode embutido criado com o destino da JVM 1.8 no bytecode que está sendo construído com o destino 1.6 da JVM


486

Ao tentar executar o exemplo CorDapp ( https://github.com/corda/cordapp-example ) via IntelliJ, recebo o seguinte erro:

Não é possível bytecode embutido criado com o destino da JVM 1.8 no bytecode que está sendo construído com o destino 1.6 da JVM

Como posso modificar as configurações do IntelliJ para que todo o bytecode seja construído com o mesmo destino da JVM?


5
Eu era capaz de resolver este problema adicionando esta biblioteca para build.gradledependências {compilação ( "org.jetbrains.kotlin: Kotlin-stdlib-jdk8")}
Munish Chandel

1
@MunishChandel Isso não é suficiente. Nós também deve fazer o que a resposta abaixo sugere ...
IgorGanapolsky

Respostas:


1034

app / build.gradle

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

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

GL

Use os recursos da linguagem Java 8


31
Essa deve ser a solução verificada.
Phil

9
Nesta data e no Android Studio v3.5, esta é a única solução que funcionou, depois de tentar todo o resto. Estranhamente, definir o mesmo valor em Configurações> Compilador Kotlin não tem efeito.
User3399299

53
Apenas o kotlinOptions { jvmTarget = "1.8" }deve ser suficiente.
petter

2
trabalhou, ea resposta é auto-explicativo e conciso
Vikas Pandey

4
Então deve "invalidar o cache e reiniciar"
B-GangsteR

214

Você pode corrigir esse problema da seguinte maneira:

  • Abra as preferências do IntelliJ
  • Ir para Build, Execution, Deployment> Compiler> Kotlin Compiler MAS Other Settings > Kotlin compilerse Android contexto>3.4
  • Mude Target JVM versionpara1.8
  • Clique Apply

6
Eu já tenho essa configuração corrigida para 1,8, mas ainda vejo esse erro ao percorrer os pontos de interrupção. Vejo isso principalmente ao acessar as consultas do Vault. Mais alguma sugestão? Parece que esse bit JVM de destino não o corrige totalmente.
Arsalan Khalid 25/03

38
Em sua estrutura de projeto , certifique-se de alterar também Target platformpara JVM 1.8 em sua Kotlinfaceta, na Generalguia
Anyul Rivas

7
Este erro pode aparecer se houver uma dependência não resolvida !
programasths

5
Para mim, as Kotlin Compilerconfigurações foram realmente colocadas em Other Settingsseção.
Qwertyfinger 03/07/19

10
Se a reinicialização após a aplicação não for suficiente → Reiniciar e invalidar caches.
Bartek Lipinski

104

você deve configurar algo como a seguir em build.gradle

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

14
Ou, alternativamente, na Gradle Kotlin DSL:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
Breandan

Alguma idéia de como fazer isso funcionar com o kotlin-androidplugin?
ZeroDivide

Funciona sem muito aborrecimento. Eu recomendo
Mitch

Eu tinha isso no build.gradle, mas de alguma forma a IDEA substituiu essa configuração. A resposta de Saeed funcionou para mim.
Nils petersohn 11/07/19

Adicione isso na seção android {} do Gradle no nível do aplicativo.
Parag Kadam

80

No meu caso, apenas alterar a Versão da JVM de destino da seguinte forma: Arquivo> Configuração> Compilador Kotlin> Versão da JVM de destino> 1.8 não ajudou. No entanto, ele resolveu o erro de tempo de compilação. Mas falhou no tempo de execução.

Eu também tive que adicionar o seguinte no arquivo build.gradle do aplicativo para fazê-lo funcionar.

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

2
funciona um encanto. obrigado
dave o grady

trabalho! obrigado
Waldmann

55

Quando as outras soluções não funcionaram para você (Alterando a versão da JVM nas configurações do Compiler e adicionando jvmTargetà sua build.gradle), por causa de seus .imlarquivos tentarem forçar suas configurações, você pode alterar a plataforma de destino em Configurações do Projeto.

  • Aberto File > Project Structure
  • Vá para FacetsabaixoProject Settings
    • Se estiver vazio, clique no +botão pequeno
  • Clique no seu módulo / módulos Kotlin
  • Mude Target Platformpara JVM 1.8(também é melhor verificar a Use project settingsopção)

3
Não consigo encontrar essa ou a seção 'facetas' no Android Studio ... 🤔 Eu tive que editar o app.iml manualmente. I definir <configuration version="3" platform="JVM 1.8" useProjectSettings="false">a truee funcionou. No entanto, o arquivo continua mudando de volta!
Aphex

1
@Aphex Na verdade, está em "Arquivo"> ​​"Estrutura do Projeto" e, em seguida, em "Configurações do Projeto"> "Facetas", como eu não tinha nada lá, cliquei em "+"> "Kotlin"> Selecione meu projeto. Que fez isso para mim :)
Nicolas Guillaume

Isso funciona para mim, mas ser forçado a voltar para a 1.6 toda vez que adiciono ao meu arquivo build.gradle.kts.
Lou Morda

Existe uma maneira de ter isso configurado e retirado do arquivo gradle? IMHO esta configuração incorreta é um bug no intellij.
Jilles van Gurp 12/03/19

35

No meu caso, esse código não funcionou até eu passar apply plugin: 'kotlin-android'de baixo para cima.

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 o truque para mim, thx
Didi

32

No Android Studio 4.3.2, a adição do procedimento abaixo não está funcionando.

  1. Abra as preferências do IntelliJ
  2. Ir para Construir, Execução, Implantação > Compiler > Kotlin Compiler MAS Outras Configurações> compilador Kotlin se Android contexto> 3.4
  3. Altere a versão da JVM de destino para 1.8
  4. Clique em Aplicar

O motivo é que o Android studio não pode adicionar o código abaixo no arquivo Gradle no nível do módulo. Por favor, adicione-o manualmente.

kotlinOptions {
    jvmTarget = "1.8"
}

Apenas para o complemento, procure a versão Target JVM na pesquisa de estúdio do Android. O levará diretamente à opção. insira a descrição da imagem aqui


somente adicionando manualmente, funcionou para mim. Por alguma razão, o android studio é realmente buggy e não considera as alterações aplicadas, a menos que reiniciemos o ide excluindo todo o cache.
Karan Sharma


26

Feb 2020
android 3.4+
Vá para Arquivo -> Configurações -> Compilador Kotlin -> Versão da JVM de destino> definido como 1.8 e, em seguida, certifique-se de fazer Arquivo -> Sincronizar projeto com arquivos Gradle

Ou adicione isso em build.gradle (module: app) no bloco android :

kotlinOptions {
           jvmTarget = "1.8"
         }

apenas "Sincronizar projeto com arquivos Gradle" funciona para mim ..
Akash Bisariya

confirmou que você precisa fazer o projeto Arquivo -> Sincronizar com arquivos Gradle, e então funciona
Irfandi D. Vendy

19

Como está escrito nos documentos using-maven do site da Kotlin:

Você só precisa colocar <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>na seção de propriedades do seu pom.xml


19

Se você tiver muitos conjuntos de fontes / módulos, pode ser complicado configurar o jvmTarget para cada um deles separadamente.

Você pode configurar o jvmTarget para todos eles de uma vez da seguinte maneira:

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

Esse snippet pode ser usado no nível superior do seu arquivo gradle.build

Depois de modificar o arquivo gradle Reimport All Gradle Imports. Para verificar se funcionou, abra Project Structuree verifique se o IntelliJ foi atribuído corretamente JVM 1.8a todos os módulos Kotlin. Deve ficar assim:

estrutura do projeto

Eu não recomendaria alterar a plataforma diretamente no IntelliJ, porque qualquer outra pessoa que clonar seu projeto pela primeira vez provavelmente enfrentará o mesmo problema. A configuração correta no gradle tem a vantagem de que o IntelliJ se comportará corretamente para eles desde o início.


16

No meu caso, resolvi isso seguindo estas duas etapas

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"
        }
    }

Ei, obrigado pela resposta, eu tive que fazer o segundo passo, e está funcionando. Você pode explicar por que é necessário?
hushed_voice 16/09/19

você pode encontrar mais detalhes sobre esta questão fechada É bom saber [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

Esse link está inoperante
hushed_voice 25/09/19

12

Para mim, o motivo foi essa configuração no meu build gradle estar em alguns módulos e em alguns não

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

1
Obrigado, esta foi a única solução que funcionou para mim. Estou usando os arquivos do kts buiild.
Krames 11/07/19

Obrigado, estas também são as soluções que funcionaram para mim. E muito declarativo dessa maneira. stackoverflow.com/a/57041765/3763032 kevin também afirmou isso, devido à SmartCast em KOTLIN arquivos Gradle .kts está disponível diretamente
mochadwi

12

Para Gradle com o idioma Kotlin ( *.gradle.ktsarquivos), adicione este:

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

Por que precisamos lançar thisa KotlinJvmOptions. O thisreceptor kotlinOptionsjá não está no bloco KotlinJvmOptions? Ainda assim ele não funciona para mim sem o elenco
11m0

1
@ 11m0, acho que está relacionado a esse problema: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

Quando KotlinJvmOptions não for encontrado, tente usar o nome completo "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW

4

na maioria dos casos, isso é suficiente:

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

se você declarou tarefas Gradle personalizadas, como integrationTestpor exemplo, adicione uma configuração para compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

isso também funcionaria adicionando ao arquivo gradle -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel em

Curiosamente, apenas sua solução funcionou com meu módulo não Android! obrigado!
Mohammad Omidvar 12/04

4

A configuração sourceCompatibility = JavaVersion.VERSION_1_8ativa a remoção de açúcar, mas atualmente não é possível remover todos os recursos do Java 8 que o compilador Kotlin usa.

insira a descrição da imagem aqui

Correção - a configuração kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8no módulo de aplicativo Gradle resolveria o problema.

Use os recursos da linguagem 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

Todas as respostas aqui estão usando gradle, mas se alguém como eu acabar aqui e precisar de resposta para o 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>

A mudança do arquétipo do jetbrains para o kotlin-jvm é a <configuration></configuration>especificação do jvmTarget. No meu caso 11


3

Nada funcionou para mim até que eu atualizei minha dependência do plugin kotlin.
Tente o seguinte:
1. Invalide o cahce e reinicie.
2. Sincronize o projeto (pelo menos tente)
3. Vá em Arquivo -> Estrutura do projeto -> Sugestões
4. Se houver uma atualização referente ao Kotlin, atualize-a.
Espero que ajude alguém.


a correção mais fácil
u84six 19/03

2

Se estiver usando o Visual Studio Code ** com extensão Kotlin, vá para o gerenciamento de plug-ins Crtl + Shift + x, digite kotlin e clique em gerenciar (a pequena engrenagem) >> Definir configurações de extensão

no Kotlin >> Compilador >> Jvm: Target - digite a versão java. Na minha situação, digitei 1,8

E então reinicie :-)

** vscode ou apenas 'code' para linux


2

No meu caso, Arquivo> Configuração> Compilador Kotlin> Versão da JVM de destino> 1.8


2

Estou usando o Kotlin e Gradle para o desenvolvimento normal da JVM, (não o Android) e isso funcionou para mim em build.gradle:

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

1

Se você usa o Eclipse, assumindo que baixou o plug-in Kotlin:

Clique com o botão direito do mouse em Projeto -> Propriedades -> Compilador Kotlin -> Ativar configurações específicas do projeto -> Versão de destino da JVM "1.8"


1

Para versões recentes do Android Studio, se a alteração apenas da versão da Kotlin Target VM não funcionasse.

Arquivo Structure Estrutura do projeto ➞ Módulos ( app): defina "Compatibilidade de origem" e "Compatibilidade de destino" para "1,8 (Java 8)". Pressione "OK" e sincronize o projeto com o Gradle.


1

se você estiver no projeto android

no build.gradle do seu aplicativo no 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

Usando o DSL Kotlin Gradle, isso resolveu o problema para mim. Eu adicionei isso ao build.gradle.kts. Isso é uma adição à resposta de Joel

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

1
Você pode compartilhar exatamente onde está o arquivo que colocou isso? E qual versão do plug-in e gradle do Android você está usando?
treesAreEverywhere

Este não é um projeto do Android. Estou executando o Gradle 6.4.
Briantical

0

Outra dica para usuários do Eclipse. Após verificar novamente as configurações de destino da jvm apontadas por outros usuários, eu ainda tinha o mesmo problema, causado pela falta da Kotlin Runtime Library. Por exemplo, ao criar um projeto com spring initializr, ele não é adicionado automaticamente. Para adicioná-lo:right click on your project -> Build path -> Add libraries... -> User Library e simplesmente adicioneorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Atualize seu projeto de graduação posteriormente ( right click -> Gradle -> Refresh gradle project)


0

Se você estiver enfrentando esta mensagem em um projeto Spring Boot / Kotlin, defina a propriedade "kotlin.compiler.jvmTarget" como "1.8" no seu pom.xml.

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

0

No meu caso, jvmTarget já estava definido no build.gradlearquivo como abaixo.

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

Mas meu problema ainda estava lá. Por fim, ele é resolvido após a alteração da versão da JVM de destino de 1.6 para 1.8 em Preferências> Outras configurações> Compilador Kotlin> versão da JVM de destino. veja a imagem em anexo,

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.