Org.jetbrains.kotlin.gradle.internal.KaptExecution yürütülürken bir hata oluştu


98

Birdenbire bu hatayı almaya başladım ve birisinin bu hatanın nerede olduğunu bana bildirmesinin neden yeterince yardımcı olacağına dair bir fikrim yok. Android stüdyosunun yeni güncellemesi nedeniyle alabildiğim kadarıyla bu. Aldığım hatanın ayrıntılı özeti.

Task :app:kaptDebugKotlin
    ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1C:\Users\shubh\Downloads\MarginCalculator\app\build\generated\source\kapt\debug\com\kotlin_developer\margincalculator\DataBinderMapperImpl.java:10: error: cannot find symbol
    import com.kotlin_developer.margincalculator.databinding.FragmentCalculatorScreenBindingImpl;

    symbol:   class FragmentCalculatorScreenBindingImpl

    Task :app:kaptDebugKotlin FAILED
    location: package com.kotlin_developer.margincalculator.databinding
    FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 17s
29 actionable tasks: 27 executed, 2 up-to-date

lütfen kodunuzu build.gradledosyada gösterin .
Sergey

lütfen DataBinderMapperImpl.java kodunu da gösterin.
Sergey

3
Android Studio 4'e güncellediniz mi? aynı pb burada
Samuel Eminet

2
Android Studio 4'e güncelledim ve Room'u kullanırken aynı hatayı alıyorum, sorgularımdan birini değiştirerek geçici olarak düzeltebildim. Başlangıçta şu sorguyu aldım: "SavedCases'ten SELECT case_name" ve sonra onu "SELECT * FROM SavedCases" olarak değiştirdim ve hata mesajı kayboldu. Nedense, bu hatayı yalnızca belirli sütunları sorgulamaya çalıştığımda alıyorum. Bu, sorun için ideal bir çözüm değildir ve umarım birisinin daha iyi bir düzeltmesi vardır.
Hani

Benzer bir hata yaşadım ve benim için çalışan bir çözüm buldum. Benzer bir şey yapmış olabilirsin. stackoverflow.com/questions/63133657/…
Mustaqode

Yanıtlar:


134

Android Studio'nun kullanıcı arayüzü sadece hatayı gizliyordu ...

hata oluştuğunda, liste görünümünde öğeyi vurguladı ve terminal görünümünde yardımcı olmayan bir mesaj gösterdi. kötü kötü

gerçek hatayı bulmak için liste görünümünde kök öğeyi seçin, böylece Android Studio tüm derleme çıktısını terminal görünümünde görüntüleyecektir, ardından hatayı bulmak için kaydırın. iyi iyi


2
Derleme zamanı Oda (DB) hatası alıyorsanız, bunu şu şekilde gösterecektir - bu, sorgularınızdan birinin veya bazılarının yanlış olduğu anlamına gelir
Idan Damri

51

Belki cevap için biraz geç kaldım ama yine de aynı hatayı alıyordum. Derleme hatası, Android Studio'nun muhtemelen proje boyutunun çok büyük olması nedeniyle gösteremediği bazı hatalardan kaynaklanabilir.

İşte tam hatayı göstermenin kolay yolu.

  1. Android stüdyosunda Analiz menüsüne gidin ve Kodu İncele'ye tıklayın ; tüm projeyi kontrol edin, Tamam'a tıklayın ve incelemenin bitmesini bekleyin.

    Kodu İncele

  2. Şimdi tüm hataları, uyarıları vb. Gösteren bir sekme göreceksiniz ve şimdi asıl sorunu çözebilirsiniz.

    Hatalar sekmesi


2
evet, tam olarak hata gösteriyor. (XML'de bir hata yaptım)
Hari Shankar S

1
Bir derleme başarısız olduğunda neden Android Studio'nun hatayı doğrudan göstermediğini anlamıyorum, bu bir anlam ifade etmiyor. Bunun için teşekkürler, bana çok yardımcı oldu
moyo

29

Altta yatan sorunun ne olduğunu bulmanın yolu, aşağıdaki komutu çalıştırmaktır:

./gradlew assembleDebug --stacktrace

14

Bir süre aynı hatayı yaşadım, sonra veritabanı kodumda bir yazım hatası yaptığımı öğrendiğim diğer paketleri kontrol etmeye başladım. Yani, "Veritabanınızı ve diğer aktivite sınıfı dosyalarınızı gözden geçirin, orada bazı hatalar bulabilirsiniz."


4
Ne tür hatalar?
Mustaqode

Benim için navigasyon grafiğinde bir hata vardı
Jorge Casariego

Benim durumumda, ben eklemeyi unuttuğu @DaoMyDao arayüzünde
Ishaan Kumar

14

Aynı sorunu yaşadım, bu yüzden daha fazla bilgi almaya çalıştım.

gradle-> app-> Tasks-> Build-> assemble

Bundan sonra "Ek açıklama işlenirken hata" diyen tam bir hata aldım. Yakın zamanda ayarlanan DAO sınıfımı kontrol ettim ve yöntem dönüş türlerinden birinin tanımlanmadığını buldum.

//Before
@Query("SELECT countryName FROM country_table WHERE countryCode= :code")
    fun getCountryNameForCode(code: String)

//After
@Query("SELECT countryName FROM country_table WHERE countryCode= :code")
    fun getCountryNameForCode(code: String): String

gradle->app->Tasks->Build->assembleo nedir?
user25

@ user25 Gradle aracı penceresi
Ajay Gurappanavar

11

Değişiklik

implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"

İçin

 implementation "androidx.room:room-runtime:2.2.5"
 kapt  "androidx.room:room-compiler:2.2.5"

harika, yardımcı oldu
kullanıcı25

8

'Com.android.tools.build:gradle:4.0.0' sınıf yoluna yükseltme yaptıysanız, önceki sürümü değiştirin

dependencies {
    classpath 'com.android.tools.build:gradle:3.6.3'
}

Ve gradle-wrapper.properties'i değiştirin

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-   all.zip`

16
Bu doğru çözüm değil
Shubham Tater

2
@ShubhamTater Bu, gradle4.0.0 düzeltilene kadar çözümdür. Bu geçici çözümdür. Gradle4.0.0 düzeltildikten sonra.
Gradle

3
Bu istisnayı 4.0.1'de yakaladım
Ярослав Нестеров

8

Benim için, bir sürü referans hatası ve XML ifadelerindeki bir hata DataBindingbu hatayı yarattı.

<variable/>Bir layoutdosyadaki bir dosyayı sildim , çünkü artık ona ihtiyacım olmadığını düşündüm. layoutDosyada başvurulan değişkene sahip olduğumu unuttum .

Projeyi oluşturduktan sonra, bu BindingImpl, mevcut olmadığı ve bu hata yalnızca yukarıdaki KaptExecutionhataya paralel bir uyarı olarak gösterildiği için sınıfın içe aktarılmasının mümkün olmadığı bir hata oluşturdu.

Bir süre aradıktan sonra bu hatayı buldum ve çözdüm. Sonra, gösterilen yerlerde bir sürü referans hatası, çünkü bir şeyi yeniden adlandırdım ve Fragmentdosyalarda yeniden adlandırmadım . Bu hataları da çözdükten sonra, yapı benim için hata veya uyarı olmadan tamamlandı.


1
Doğru, bu hata her zaman veritabanımızın kullandığı XML dosyasıyla ilgilidir.
Shubham Tater


2

Benim durumumda, oda kullandım ve veri tabanı yöntemlerimden birinde kullanılmayan bir parametre var ve maalesef android studio beni doğru şekilde uyarmıyor


1

Ben de aynı sorunu yaşadım. Sorunu nasıl çözdüğüm ve sorunu çözme şeklimle ilgili örnek üzerinden size yol göstermeme izin verin, belki daha büyük bir resim elde edebilirsiniz.

Çözmeden önce

@Entity(tableName = "modules")
data class Module
(
    @PrimaryKey val id: Int,
    val name: String
)

@Entity(tableName = "sessions")
data class Session
(
    @PrimaryKey(autoGenerate = true) var id: Int,
    @ColumnInfo(name = "module_id") val moduleId: Int,
    @ColumnInfo(name = "start_time") val startTime: String,
    @ColumnInfo(name = "end_time") val endTime: String
)

data class ModuleSession
(
    @Embedded val module: Module,
    @Relation(
        parentColumn = "id",
        entityColumn = "module_id"
    )
    val sessions: List<Session>,
    @ColumnInfo(name = "is_updated") val isUpdated: Boolean = false // The problem
)

DAO'da

@Transaction
@Query("SELECT * FROM modules")
abstract suspend fun getModuleSession(): List<ModuleSession>

Aldığım hata

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

Bu yüzden daha derine inip aşağıdaki mesajı buldum

The columns returned by the query does not have the fields [isUpdated] in com.gmanix.oncampusprototype.Persistence.ModuleSession even though they are annotated as non-null or primitive. Columns returned by the query: [id,name]
    public abstract java.lang.Object getModuleSession(@org.jetbrains.annotations.NotNull()

IsUpdated alanını POJO ModuleSession'dan kaldırdım ve oturum tablosuna ekledim

Değişikliklerden sonra

@Entity(tableName = "sessions")
data class Session
(
    @PrimaryKey(autoGenerate = true) var id: Int,
    @ColumnInfo(name = "module_id") val moduleId: Int,
    @ColumnInfo(name = "start_time") val startTime: String,
    @ColumnInfo(name = "end_time") val endTime: String,
    @ColumnInfo(name = "is_updated") val isUpdated: Boolean = false
)

data class ModuleSession
(
    @Embedded val module: Module,
    @Relation(
        parentColumn = "id",
        entityColumn = "module_id"
    )
    val sessions: List<Session>
)

Öte yandan, SELECTifadede sorunlara neden olan şüpheli herhangi bir alan olup olmadığını çapraz kontrol edin veya@Ignore

Ancak yine de rahat değilseniz, kodunuzu gönderebilirsiniz.

Umarım bu yardımcı olabilir


Sorunumun çözümünü buldum, sizin için çalışıp çalışmayacağını bilmiyorum ama bağlayıcı olduğunuz XML dosyanızı kontrol edin, ciltleme bir derleme zaman sistemidir ve XML dosyası için çalışır, bu yüzden kontrol edin içindeki herhangi bir hata bu tür bir hatayı gösterecektir. XML dosyamı düzelttikten sonra her şey mükemmel çalışıyor.
Shubham Tater

1
Evet lütfen. nasıl daha derine indin?
Simo Nyathi

1
@LeonardoSibela bunun için üzgünüm, demek istediğim, derleme sırasında --stacktrace seçeneğini eklemektir, böylece hata hakkında daha fazla bilgi alabilirim.
Ali

Dosya-> Ayarlar-> Oluştur, Yürütme, Dağıtım-> Derleyici-> Komut satırı Seçenekleri'nden --stacktrace seçeneğini ekleyebilirsiniz. Benim durumumda bir bağımlılık eksikti: uygulama "androidx.room:room-ktx:$ room_version "
Amber

1

Yukarıdaki @Rene Casuslarının cevabına seslenin, veri bağlama ile çalışırken de bu hatayı aldım. Kotlin'deki @Bindablea data classöğesinin birincil yapıcısındaki bir alana ek açıklamayı koyduğunuzda, yapı motorunun bundan hoşlanmadığı ortaya çıktı .

Bu yüzden asla aşağıdakileri yapma,

data class MyAwesomePojo(
    @Bindable
    var firstname: String,
    var lastname: String
)

bunun yerine yapmanız gereken şey

data class MyCorrectAwesomePojo(
    var lastname: String
):{
    @get:Bindable
    var firstname: String
        set(value){
            field = value
        }
}

Bonus: Ayarlama ve alma işlemlerinin sonsuz döngüsünü önlemek için benim gibi iki yönlü bağlamayı kullanmaya çalışıyorsanız, alana değeri ayarlamadan önce aynı değerleri kontrol etmeyi unutmayın.


Sorunumun çözümünü buldum, sizin için çalışıp çalışmayacağını bilmiyorum ama bağlayıcı olduğunuz XML dosyanızı kontrol edin, ciltleme bir derleme zaman sistemidir ve XML dosyası için çalışır, bu yüzden kontrol edin içindeki herhangi bir hata bu tür bir hatayı gösterecektir. XML dosyamı düzelttikten sonra her şey mükemmel çalışıyor.
Shubham Tater

1

İlginç bir şekilde, Retrofit'in açıklamasını eklediğim için bu hatayı alıyordum. Oda ve Güçlendirme açıklamalarını karıştırmamaya dikkat edin.


1

Benim durumumda bunun nedeni, ViewModel'imde Observable'ı uygulamamış olmamdı. Kısıtlama düzenine bir EditText ekledim.android:text="@={addProductViewModel.inputProductName}"

ObservableViewModel sınıfıma uyguladığımda hata gitmişti

ViewModel

class AddProductViewModel (
    private val repository: ProductRepository,
    private val context: Context
): ViewModel(), Observable {

    @Bindable
    val inputProductName = MutableLiveData<String>()


    fun addProduct() {
        //inputProductName.value
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }
}

Fragments kullanarak MVVM Databinding için eksiksiz örnek

Düzen - add_product.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <data class=".AddProductBinding">
        <variable
            name="addProductViewModel"
            type="com.rao.iremind.AddProductViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <EditText
            android:id="@+id/editTextTextProductName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Product name"
            android:inputType="textPersonName"
            android:text="@={addProductViewModel.inputProductName}"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />



    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

AddProductFragment

class AddProductFragment: Fragment() {
    private lateinit var binding: AddProductBinding
    private lateinit var addProductViewModel: AddProductViewModel
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding =  DataBindingUtil.inflate(inflater, R.layout.add_product, container, false)
        val dao = SubscriberDatabase.getInstance(requireActivity().applicationContext).productDAO
        val repository = ProductRepository(dao)
        val factory = AddProductViewModelFactory(repository, requireActivity().applicationContext)
        addProductViewModel = ViewModelProvider(this, factory).get(AddProductViewModel::class.java)
        binding.addProductViewModel = addProductViewModel
        binding.lifecycleOwner = this
        val view = binding.root

        return view
    }
}

AddProductViewModel

class AddProductViewModel (
    private val repository: ProductRepository,
    private val context: Context
): ViewModel(), Observable {

    @Bindable
    val inputProductName = MutableLiveData<String>()


    fun addProduct() {
        //inputProductName.value
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
        TODO("Not yet implemented")
    }
}

Umarım bu R yardımcı olur


1

Benim Durumumda: Sorun çözüldü

Adımlar:

  1. ViewModel değişkenini kaldır - XML'de .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Tüm viewModel bağlama referansları kaldırıldı - XML'de .
android:text="@{viewModel.simName}"
  1. Bağlama eşlemesine viewModel örnek başvurusu kaldırıldı - Etkinlik İçi
binding.viewModel = viewModel
  1. Projeyi temizleyin ve yeniden derleyin.

  2. ViewModel değişkeni ekle - XML ​​& Build projesinde .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Bağlama eşlemesine viewModel örnek başvurusu ekleme - Etkinlik ve Derleme projesinde
binding.viewModel = viewModel
  1. Tüm viewModel bağlama referanslarını ekleyin - XML & Build projesinde. .
    android:text="@{viewModel.simName}"
  1. Şimdi çalışacak.

- Umarım senin için de işe yarar.


1

Room ile aynı sorunu yaşadım ve viewBinding kullanmıyordum . Veritabanı sınıfımda exportSchema'yı yanlış
olarak kullanmamı düzelttim .

@Database(entities = [ModelClass::class], version = 1, exportSchema = false)
abstract class ModelDatabase: RoomDatabase() {}

Unutmayın: exportScehma, kullanım durumunuza göre değişebilir, genellikle yanlış kalır, bu yüzden yanlış olarak koyarım.


1

Benim durumumda, global olarak bir değişken UserManager'ı NetWorkManager olarak değiştirdim ve UserManager sınıflarının olduğu her yerde NetworkManager'a dönüştüm.

Hilt kullandığım için projeyi yeniden inşa etmem gerekti.

Projeyi temizledim ve Kotlin hataların nerede olduğunu gösterdi.


1

Ben de aynı sorunla karşılaştım, bu yüzden sadece denemek için projenin .idea klasörünü ve .gradle klasörünü sildim, ardından uygulama klasörünün içindeki yapı klasörünü de sildim ve ardından android studio IDE'yi yeniden başlattım ve benim için çalışıyor


1

Benim için sorun, modelde tanımlanmış 2 birincil anahtarın olmasıydı.

// before    
@field:ColumnInfo(name = "id") @field:PrimaryKey(autoGenerate = true) var id: Long = 0,
@field:ColumnInfo(name = "name") @field:PrimaryKey var name: String,
    
//after
@field:ColumnInfo(name = "id") @field:PrimaryKey(autoGenerate = true) var id: Long = 0,
@field:ColumnInfo(name = "name") @field:NotNull var name: String,

Sorunla ilgili mesajı tetiklemek için projeyi yeniden inşa etmem ve Dao sınıfını biraz değiştirmem gerekiyordu.



1

Bu yöntem bana, Roomveritabanıyla ilgili bir sorun olan her şeyi ve Coroutineshatta yazım hatalarını ortaya çıkarır. Son olarak, Flow<Long>DAOs sınıflarından : sütun eklendikten sonra Flow ile tek bir değer döndürmeye çalışırken oldu .

Bir suspendişlev olmalı ve yalnızca Longsütun eklendikten sonra döndürülecek türden olmalıdır.

Bu sorunlar bazen belirsiz olabilir, bu nedenle tüm Çıktı Oluştur mesajlarını okumaya çalışın, bana yardımcı olan mesaj şuydu: error: Not sure how to handle insert method's return type.


1

Hiçbir şey işe yaramadı Her şeyi denedim ve sonunda büyük bir sorun yaratan küçük bir hata buldum.

Veritabanı için yeni oluşturulan her dosyaya geri dönün ve her dosyanın satır satır kodunu dikkatlice kontrol edin.

Veritabanı sınıfını kontrol edin ve Dao'nun örneğin beyan edilip edilmediğini kontrol edin,

abstract val commentDatabaseDao: CommentDatabaseDao

val not var olarak ilan et , bu benim durumumdaydı ve nihayet bu çözüldü.


1

Bu benim başıma geldi. Başka bir geliştirici, bir birleştirmeyi düzgün bir şekilde tamamlamadı, bu nedenle bu satır kodun içindeydi

<<<<<<< HEAD

Derleme hatası almak yerine KaptExecution hatası aldım.


1

Çok fazla acıdan sonra , en azından bir hata mesajı veya kaynağı bulmama yardımcı olabilecek herhangi bir şey gösterebileceğini ummak annotationProcessoryerine denemeye karar verdim kapt. Ama neyse ki (ya da ne yazık ki; boşa harcanan zaman nedeniyle), hatasız bir şekilde başarıyla inşa edildi. Çoğunlukla kaptkendi başına bir hatadır . Öyleyse, bu çözümü deneyin ve yardımcı olabilir.


1

Gerçekten, sorun kodunuzdaki tipografide yatıyor. Bana gelince, kapt eklentisini kullanmayı bırakmak zorunda kaldım. Daha sonra annotationProcessor kullanmaya geçtim. Yapım sonrası hatanın ne olduğunu açıkça belirtti.

Hatayı çözdükten sonra kapt kullanmaya geri dönebilirsiniz.

Benim için yaptığım hata, yanlışlıkla bir metin görünümünde iki yönlü veri bağlamayı denememdi.


1

Ben de aynı sorunu yaşadım. Benim durumumda sorun Veritabanı ile ilgiliydi. bu kod satırını değiştirmek zorunda kaldım @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

Veritabanına başka bir tablo ekledim ancak yukarıdaki satıra tablo eklemeyi unuttum.


1

Ben de aynı hatayı aldım. İki sorunum vardı.

  1. Eklemeniz gerekebilir

    uygulama 'androidx.room:room-ktx:2.2.5'

  2. Activity_xml dosyalarından birinde üye olarak atıfta bulunulan bir dosyayı sildim. Hata, kapt yerine annotationProcessor olarak değiştirene kadar bana hiçbir ipucu vermedi, sonra hatayı gösterdi, dosyayı buldum ve artık kullanmadığım ve silindiğim bir dosyaya referansım olduğu kesin. Bu veri referansını xml'den kaldırdım ve hepsini temizledim. Sonra onu KEP'e geri koydum.


0

bazı durumlarda gradle.properties'e yardımcı olabilir

kapt.include.compile.classpath=true

0

benim durumumda bu satırı ekledim

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }

0

Android Studio IDE'yi 4.1.1 sürümüne güncelledim ve benzer bir sorunla karşılaştım.

Farkına vardığım şey ...

… Daha önce bazı *_Implderslerim yoktu (Kotlin konusunda biliyorum) ve yeni *Testsdersler bile yoktu .

Bu yüzden, bir çözüm almak için "tüm dünyayı çalıştır" ın ardından, sezgisel ve adil bir seçim yaptım : Android Studio güncellemesinden önce orada olmayan "elle oluşturulmuş" paketlerimin içindeki tüm dosyaları sildim .

Ve tahmin et ne oldu?

İşe yaradı. Sorun yok, tek bir sorun bile yok kapt.

Bunun nihai bir çözüm olduğunu söylemiyorum. Ama sizin için çalışabilir.

İyi günler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.