我正在尝试开发一个Kotlin AnnotationProcessor库,我想不出为什么会出现这个错误:
错误:任务“:app:javaprecompiledebug”执行失败。
>现在必须显式声明批注处理器。发现编译类路径上的以下依赖项包含注释处理器。请将它们添加到annotationProcessor配置中。
· · · -compiler.jar(项目:编译器)
· 或者,设置android.defaultconfig.javacompileOptions.AnnotationProcessorOptions.IncludeCompileClasspath=true以继续以前的行为。请注意,该选项不推荐使用,并将在将来删除。
· 请参阅https://developer.android.com/r/tools/annotation-processor-error-message.html了解更多详细信息。
我知道我可以使用includeCompileClasspath=true
,我试过了,它工作得很好。但是正如前面提到的,它已经不推荐使用了,很快就会被删除,预计它将被用于根据android Doc不使用的库。
所以我在找一个更干净的解决方案。
hello.kt
@HelloGenerated
class Hello(){
override fun showLog() {
Log.i(Hello::class.simpleName, "${Gahfy_Hello().getName()}")
}
}
Build.Gradle
依赖项{kapt project(“:compiler”)compileOnly project(“:compiler”)实现“org.jetbrains.kotlin:kotlin-reflect:$kotlin_version”}
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class HelloGenerated
我也尝试了没有目标和保留的情况,但有相同的问题
HelloGenerator.kt
@SupportedAnnotationTypes("net.gahfy.HelloGenerated")
class HelloGeneratedInjectorProcessor: AbstractProcessor() {
override fun getSupportedAnnotationTypes(): MutableSet<String> {
return mutableSetOf(HelloGenerated::class.java.name)
}
override fun getSupportedSourceVersion(): SourceVersion {
return SourceVersion.latest()
}
override fun process(annotations: MutableSet<out TypeElement>, roundEnv: RoundEnvironment): Boolean {
val annotation = annotations.firstOrNull { it.toString() == "net.gahfy.HelloGenerated" } ?: return false
for (element in roundEnv.getElementsAnnotatedWith(annotation)) {
val className = element.simpleName.toString()
val `package` = processingEnv.elementUtils.getPackageOf(element).toString()
generateClass(className, `package`)
}
return true
}
private fun generateClass(className: String, `package`: String) {
val kotlinGeneratedPath = (processingEnv.options["kapt.kotlin.generated"] as String).replace("kaptKotlin", "kapt")
val kaptKotlinGenerated = File(kotlinGeneratedPath)
val source = "package $`package`\n\nclass Lachazette_$className(){fun getName():String{return \"World\"}}"
val relativePath = `package`.replace('.', File.separatorChar)
val folder = File(kaptKotlinGenerated, relativePath).apply { if(!exists()){mkdirs()} }
File(folder, "Lachazette_$className.kt").writeText(source)
}
companion object {
const val KAPT_KOTLIN_GENERATED_OPTION_NAME = "kapt.kotlin.generated"
}
}
Build.Gradle
apply plugin: 'java-library'
apply plugin: 'kotlin'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
net.gahfy.HelloGenerator
includeCompileClasspath=true
非常感谢
不确定这是否与您的问题100%相关,但在将auto-value移动到kapt
后,我出现了同样的错误。我通过将auto-value依赖项声明为kapt
和annotationprocessor
来解决这个问题。
所以在你的例子中:
dependencies{
kapt project(":compiler")
annotationProcessor project(":compiler")
compileOnly project(":compiler")
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}
我看到了这个问题,但问题是auto-value-1.1.jar不在我的gradle文件中
突然,我在执行应用程序时出错。我知道这里已经有人问过这个问题:现在必须显式声明注释处理器 然而,解决方案并没有解决问题:( 这是我的build.gradle 任何人都知道如何解决这个错误。我在谷歌上搜索没有成功。 这是收到的错误
我把我的Android studio升级到了3.0 我的build.gradle包含依赖项: 如何在Android Studio 3.0中摆脱这个错误?
现在必须显式声明注解处理器。发现编译类路径上的以下依赖项包含注解处理器。请将它们添加到annotationProcess配置中。 realm-android-0.86.0.jar(io.realm:realmandroid:0.86-0) 或者,设置以继续先前的行为。 请注意,此选项已弃用,将来将被删除。有关更多详细信息,请参阅此内容。
我在我的Android中添加了以下库,然后我得到了错误。 https://github.com/bumptech/glide/releases/download/v4.6.1/compiler-4.6.1.jar https://github.com/bumptech/glide/releases/download/v4.6.1/glide-full-4.6.1.jar 错误: 等级:
下面是我的app.gradle 在我的建筑下面。Gradle