org.jetbrain을 실행하는 동안 오류가 발생했습니다.코틀린 그라들내부의.캅트 실행
갑자기 이런 오류가 발생하기 시작했는데, 누가 이 오류가 어디에 있는지 알려주면 왜 도움이 되는지 모르겠습니다.안드로이드 스튜디오의 새로운 업데이트 덕분에 얻을 수 있는 것은 이것뿐입니다.오류에 대한 자세한 요약이 표시됩니다.
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
Android Studio의 UI는 오류를 숨기고 있었습니다...
오류가 발생하면 목록 보기에서 항목이 강조 표시되고 터미널 보기에서 도움이 되지 않는 메시지가 표시됩니다.
실제 오류를 찾으려면 Android Studio가 전체 빌드 출력을 터미널 보기에 표시하도록 목록 보기에서 루트 항목을 선택한 다음 스크롤하여 오류를 찾습니다.
아마 제가 답이 좀 늦었을 수도 있지만, 어쨌든 저는 같은 오류를 겪고 있었습니다.빌드 실패는 Android Studio가 지적하지 못하는 일부 오류로 인해 발생할 수 있습니다. 프로젝트 크기가 매우 크기 때문일 수 있습니다.
여기 정확한 오류를 지적하는 쉬운 방법이 있습니다.
Android 스튜디오에서 Analyze(분석) 메뉴로 이동하여 Inspect Code(코드 검사)를 클릭합니다. 전체 프로젝트를 확인하고 OK(확인)를 클릭한 후 검사가 완료될 때까지 기다립니다.
이제 모든 오류, 경고 등을 가리키는 탭이 나타나고 실제 문제를 해결할 수 있습니다.
바꾸다
implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"
종료(4-2021년 9월 업데이트)
implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"
기본 문제를 확인하는 방법은 다음 명령을 실행하는 것입니다.
./gradlew assembleDebug --stacktrace
터미널에서 --stacktrace를 클릭하면 자세한 오류가 나타납니다.다음 사이트에서 확인할 수 있습니다.
M1 칩 솔루션
, "" "" "" " "" "" ""를 추가할 .kapt "org.xerial:sqlite-jdbc:3.34.0"
방 청소부가 당신의 문제를 해결하기 전에.
kapt "org.xerial:sqlite-jdbc:3.36.0" // Only for computer with M1 CPU
implementation("androidx.room:room-ktx:$room_version")
kapt "androidx.room:room-compiler:$room_version"
자세한 내용은 여기를 참조하십시오.
안드로이드 스튜디오를 업그레이드한 후에 이것을 받기 시작했습니다.Arctic Fox(2020.3.1)
.
는 제 을 다에서 JDK 버해니다에서 했습니다.1.8
Embedded JDK
.
JDK를 변경하는 방법
Android Studio에서 프로젝트를 열고 File > Settings...(파일 > 설정...)을 선택합니다.> 빌드, 실행, 배포 > 빌드 도구 > Gradle
Mac: Android Studio > 기본 설정...> 빌드, 실행, 배포 > 빌드 도구 > Gradle.
Gradle JDK에서 Embedded JDK 옵션을 선택합니다.
여기서 언급한 바와 같이
저도 같은 문제가 생겨서 더 많은 정보를 얻으려고 했습니다.
그래들->앱->태스크->빌드->어셈블
이후 "주석 처리 중 오류"라는 정확한 오류가 발생했습니다.최근에 수정한 DAO 클래스를 확인해보니 메서드 반환 유형 중 하나가 정의되지 않았습니다.
//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
많은 고통 끝에, 저는 노력하기로 결심했습니다.annotationProcessor
에 kapt
적어도 오류 메시지나 소스를 찾는 데 도움이 될 만한 것을 보여주기를 바랍니다.하지만 다행히도 (또는 안타깝게도; 시간 낭비로 인해) 오류 없이 성공적으로 지어졌습니다.그것은 대부분 의 버그입니다.kapt
이도움이 될 .그래서, 이 해결책을 시도해 보면 도움이 될 것입니다.
한동안 같은 오류가 발생하다가 데이터베이스 코드에 오타가 있다는 것을 알게 된 다른 패키지를 확인하기 시작했습니다.따라서, "데이터베이스와 다른 활동 클래스 파일을 살펴보세요. 거기서 몇 가지 실수를 발견할 수 있습니다.
Android Studio 4.1.2를 사용하는 경우에도 이 문제가 발생합니다.
따라서 다음과 같은 작업을 수행해야 합니다.
jdk 11 다운로드(검색 및 다운로드)
Android Studio에서 File -> Project Structure -> Jdk Location -> 방금 다운로드한 Jdk 경로로 이동합니다.
XML이 "" "" "" "" "" ""와 함께 .DataBinding
이 오류를 생성했습니다.
는 삭했습다니를 했습니다.<variable/>
순식간에layout
파일, 더 이상 필요 없다고 생각했기 때문입니다.변가참조것잊었습다니을는다었에 나와 있는 가 있다는 .layout
java.
한 후 프젝트구발생다니습을 수 . 오류가 발생했습니다. 여기서 데이터를 가져올 수 없습니다.BindingImpl
이 의 래스와 입니다.KaptExecution
message
잠시 검색한 결과, 이 오류를 발견하고 해결했습니다.그런 다음 표시된 참조 오류의 집합입니다. 왜냐하면 내가 무언가의 이름을 바꿨지만 그것은 그것의 이름을 바꾸지 않았기 때문입니다.Fragment
파일. 이러한 오류도 해결한 후 오류나 경고 없이 빌드가 완료되었습니다.
로 프로젝트를 구축하려고 합니다.
kapt.use.worker.api=false
gradle.properties 설정 파일에서
참조: https://youtrack.jetbrains.com/issue/KT-40750
여기 있는 저도 같은 문제입니다.제 경우, 그 이유는 단검 모듈 중 하나에서 @Module 주석을 잊어버렸기 때문입니다.
이러한 AS 경고의 실제 문제를 찾으려면 깊이 있는 정보가 필요합니다. 제목에 있는 메시지는 마지막 메시지입니다. 오류의 원인 중 하나 이상이 왼쪽에서 루트 요소를 선택하는 것으로 표시되어 정확한 문제를 보여줍니다. 아래의 인쇄 화면을 확인하십시오.
저도 같은 문제가 있었습니다.저의 경우 문제는 데이터베이스에 관한 것이었습니다.나는 이 코드 라인을 변경해야 했습니다.@Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)
데이터베이스에 다른 테이블을 추가했지만 위 줄에 테이블을 추가하는 것을 잊었습니다.
저도 같은 문제가 있었습니다.제가 어떻게 문제를 해결했는지, 그리고 어떻게 해결했는지에 대한 예를 보여드리겠습니다. 아마도 더 큰 그림을 얻을 수 있을 것입니다.
확인하기 전에
@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에서
@Transaction
@Query("SELECT * FROM modules")
abstract suspend fun getModuleSession(): List<ModuleSession>
제가 받은 오류는
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
그래서 더 깊이 파고들어 아래의 메시지를 찾았습니다.
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()
POJO Module Session에서 IsUpdate 필드를 제거하고 세션 테이블에 추가했습니다.
변경 후
@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>
)
로, 에면필, 위있교확에 해 보세요.SELECT
을 달 수 있는 은 문 를 달 수 있 진 는 술 을 주@Ignore
하지만 여전히 불편하다면 코드를 게시할 수 있습니다.
그게 도움이 되길 바랍니다.
제 경우에는 추가하는 것을 잊어버립니다.@PrimaryKey
엔티티 클래스에 있습니다.
classpath 'com.android로 업그레이드한 경우.tools.build:gradle:4.0.0' 이전 버전으로 바꾸기
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
}
그리고 gradle-wrapper.properties 변경
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4- all.zip`
제 경우 jcenter()에서 mavenCentral()로 이동할 때 이 오류가 발생했습니다. 제 종속성 중 하나는 mavenCentral()이 아닌 jcenter()에서만 사용할 수 있었습니다.그래서 나는 같은 ongithub에 대한 이슈를 소유자에게 제출했고 jcenter()가 이동될 때까지 기다릴 것입니다.
앱(코틀린)에 ROOM을 추가했을 때도 같은 문제가 발생했습니다.저는 무엇이 잘못되었는지 알아내는데 어려움을 겪었고 마침내 제 앱에 ROOM을 추가하기 위해 다음을 사용하고 있다는 것을 알게 되었습니다.
//room
implementation 'android.arch.persistence.room:runtime:1.1.1'
kapt "android.arch.persistence.room:compiler:1.1.1"
그래서 저는 위의 두 줄을 다음과 같이 바꾸고 통증을 없앴습니다.
def room_version = "2.2.6"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
도움이 되었다면 위 버튼을 누르세요 :D.
저의 경우 룸을 사용했고 데이터베이스 중 하나인 Dao 메서드에 사용되지 않은 매개 변수가 있으며 안타깝게도 안드로이드 스튜디오에서 경고를 제대로 표시하지 않습니다.
새 kotlin 플러그인kotlin 플러설경우이발문새생다니합제가도에한치그을인▁()을 설치한 경우에도 합니다.1.4.20-release-Studio4.1-1
단검을 가지고 있습니다.kapt 'com.google.dagger:dagger-compiler:2.30'
이러한 경우 하나의 솔루션이 더 이상 사용되지 않는 솔루션을 대체할 수 있습니다.plugin: 'kotlin-android-extensions'
뷰 바인딩 포함(https://developer.android.com/topic/libraries/view-binding)
룸 라이브러리와 애플 M1 칩에 문제가 있는 것 같습니다.
룸 lib 버전을 2.4.0-alpha03 이상으로 업데이트하고 프로젝트를 다시 동기화합니다.
날 위해 일했다!
제 경우 업그레이드가 필요한 오래된 종속성이 있었으므로 다음을 수행할 수 있습니다.
1.파일 -> 프로젝트 구조 ->
2. Sugs Sessions로 이동합니다.
3. 경고 섹션에서 Android Studio는 업그레이드해야 하는 종속성을 보여줍니다.->
4. 거기서 직접 업그레이드하기만 하면 됩니다 ->
5.적용을 클릭합니다->
이제 작동할 것입니다!
감사합니다!
저는 방금 이런 일을 당했어요.다른 개발자가 병합을 제대로 완료하지 못했기 때문에 이 라인이 코드에 있었습니다.
<<<<<<< HEAD
컴파일 오류 대신 Kapt Execution 오류가 발생했습니다.
저의 경우 코틀린 확장 및 코틀린 지원을 룸에 추가하는 것을 잊었습니다.
defroom_version = "2.2.6" 구현 "devx.room:room-filename:$room_version"
저의 경우 새로운 fragment를 추가하면 항상 이 오류가 발생합니다. 저는 git에서 커밋 변경 사항을 조사했는데, 새 fragment를 만들 때마다 Android가 gradle 플러그인을 자동 업데이트하는 것으로 밝혀졌습니다. 그래서 저는 프로젝트 레벨 빌드 내에서 원래의 gradle 플러그인 버전으로 롤백해야 했습니다.그라들 파일:
부터
클래스 경로 'classpath'.jetbrain.코틀린:보글린-그라들-라벨:1.7.0'
로.
클래스 경로 "classpath".jetbrain.코틀린:보글린-그래들-라벨:1.6.21"
Git 변경 사항을 모니터링하여 Android가 Gradle 파일에서 수행하는 작업이 충돌의 원인인지 확인합니다.
위의 Shout to @Ren Spips의 답변에 대해 외칩니다, 저도 데이터 바인딩 작업 중에 이런 오류가 발생했습니다.당신이 그것을 넣을 때 빌드 엔진이 그것을 좋아하지 않는 것으로 밝혀졌습니다.@Bindable
의자대의 주 data class
코틀린에서
그러니 절대 다음을 하지 마세요.
data class MyAwesomePojo(
@Bindable
var firstname: String,
var lastname: String
)
대신 당신이 해야 할 일은
data class MyCorrectAwesomePojo(
var lastname: String
):{
@get:Bindable
var firstname: String
set(value){
field = value
}
}
보너스: 설정 및 가져오기의 무한 루프를 방지하기 위해 나처럼 양방향 바인딩을 사용하려는 경우 필드에 값을 설정하기 전에 동일한 값을 확인해야 합니다.
저의 경우 View Model에서 Observable을 구현하지 않았기 때문입니다.다음을 사용하여 제약 조건 레이아웃에 편집 텍스트를 추가했습니다.android:text="@={addProductViewModel.inputProductName}"
가 후한현을 했을 때Observable
내 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")
}
}
조각을 사용한 MVVM 데이터 바인딩의 전체 예
레이아웃 - 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>
제품 조각 추가
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
}
}
제품 뷰 모델 추가
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")
}
}
이것이 R에 도움이 되길 바랍니다.
내 경우:문제 해결됨
단계:
- viewModel 변수 제거 - XML에서.
<variable
name="viewModel"
type="com.xx.AppViewModel" / >
- XML에서 viewModel 바인딩 참조를 모두 제거했습니다.
android:text="@{viewModel.simName}"
- 제거된 뷰 바인딩 매핑에 대한 모델 인스턴스 참조 - In Activity
binding.viewModel = viewModel
프로젝트를 정리하고 다시 컴파일합니다.
뷰 모델 변수 추가 - XML & Build 프로젝트에서.
< variable
name="viewModel"
type="com.xx.AppViewModel" / >
- 바인딩 매핑에 viewModel 인스턴스 참조 추가 - In Activity & Build 프로젝트
binding.viewModel = viewModel
- 모든 viewModel 바인딩 참조 추가 - XML & Build 프로젝트에서..
android:text="@{viewModel.simName}"
- 이제 됩니다.
당신에게도 효과가 있기를 바랍니다.
저는 룸과 같은 문제가 있었고 viewBinding을 사용하지 않았습니다.
데이터베이스 클래스에서 exportSchema를 false로 사용하여 수정했습니다.
@Database(entities = [ModelClass::class], version = 1, exportSchema = false)
abstract class ModelDatabase: RoomDatabase() {}
기억하세요: ExportSchema는 사용 사례에 따라 달라질 수 있습니다. 일반적으로 거짓으로 유지되므로 거짓으로 표시합니다.
언급URL : https://stackoverflow.com/questions/62131564/a-failure-occurred-while-executing-org-jetbrains-kotlin-gradle-internal-kaptexec
'programing' 카테고리의 다른 글
도커 - 컨테이너에서 자동 검색을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.08.04 |
---|---|
forkJoin이 더 이상 사용되지 않습니다. resultSelector가 더 이상 사용되지 않습니다. 대신 매핑할 파이프입니다. (0) | 2023.08.04 |
PHP 배열에서 비어 있지 않은 항목을 카운트하는 방법은 무엇입니까? (0) | 2023.08.04 |
Xcode는 C 및 Objective-C 코드만 리팩터할 수 있습니다.Xcode 6에서 swift 클래스 이름을 변경하는 방법은 무엇입니까? (0) | 2023.08.04 |
SSH-Keygen "해당 파일 또는 디렉터리 없음" (0) | 2023.08.04 |