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?

Joel
fonte
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

Braian Coronel
fonte
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
Joel
fonte
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"
    }
}
Amuthan
fonte
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"
     }
 }
Md Nehaluddin Haider
fonte
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)
Saeed Masoumi
fonte
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"
    }
}
Ara Badalyan
fonte
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

Muhammad Maqsood
fonte
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
28

uma imagem vale mais que mil palavras

uma imagem vale mais que mil palavras

Ahmed D. Sherif
fonte
A pesquisa no painel de configurações também exibirá essa opção. Obrigado por isso foi realmente útil!
precisa saber é o seguinte
não ajudou para mim
Waldmann
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"
         }
USMAN osman
fonte
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

Johan Vergeer
fonte
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.

Fabian Braun
fonte
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"
        }
    }
Vikas Sharma
fonte
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 {
AdrianoCelentano
fonte
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"
    }
}
Kevin Robatel
fonte
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"
}
naXa
fonte
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"
  }
}
Anoop M
fonte
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

mattie
fonte
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.

Waldmann
fonte
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

Hinotori
fonte
2

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

Contas
fonte
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()
    }
}
Peter V. Mørch
fonte
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"

Investir
fonte
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.

ZzZombo
fonte
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"
    }
}
homem de Ferro
fonte
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()
Briantical
fonte
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)

malaquf
fonte
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>
    ...
ed3d
fonte
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

Shoaib Mushtaq
fonte