设置Explict注释处理器

时间:2017-03-24 07:17:57

标签: android maven android-studio gradle annotation-processor

我正在尝试将maven存储库添加到我的Android Studio项目中。 当我进行Gradle项目同步时,一切都很好。但是,每当我尝试构建我的apk时,我都会收到此错误:

Execution failed for task ':app:javaPreCompileDebug'.
> Annotation processors must be explicitly declared now.  The following dependencies on 
the compile classpath are found to contain annotation processor.  Please add them to 
the annotationProcessor configuration.
 - classindex-3.3.jar
Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions
.includeCompileClasspath = true to continue with previous behavior.  Note that this 
option is deprecated and will be removed in the future.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.

错误404s中包含的链接(https://developer.android.com/r/tools/annotation-processor-error-message.html)因此没有帮助。

我在android studio设置中启用了注释处理,并将includeCompileClasspath = true添加到我的注释处理器选项中。我还尝试将classindexclassindex-3.3classindex-3.3.jar添加到处理器FQ名称,但这也没有帮助。

这些是我在dependecies下添加到默认build.gradle的行:

dependencies {
    ...
    compile group: 'com.skadistats', name: 'clarity', version:'2.1.1'
    compile group: 'org.atteo.classindex', name: 'classindex', version:'3.3'
}

最初我只是有了#34;清晰度"一个补充说,因为这是我关心的那个,但我添加了" classindex"进入希望它能解决它。删除"清晰度"并保持" classindex"给了我完全相同的错误。

我不太熟悉gradle / maven所以任何帮助都会受到赞赏。

9 个答案:

答案 0 :(得分:81)

要修复错误,只需更改这些依赖项的配置即可使用annotationProcessor。如果依赖项包含也需要在编译类路径上的组件,则再次声明该依赖项并使用编译依赖项配置。

例如:

annotationProcessor 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton:butterknife:7.0.1'

此链接详细介绍了它:https://developer.android.com/studio/preview/features/new-android-plugin-migration.html#annotationProcessor_config

完整性包含相关摘要。

  

使用注释处理器依赖关系配置

     

在以前版本的Gradle的Android插件中,依赖于   编译类路径自动添加到处理器   类路径。也就是说,您可以添加注释处理器   编译类路径,它将按预期工作。但是,这会导致   通过添加大量的性能对性能产生重大影响   对处理器的不必要的依赖。

     

使用新插件时,必须将注释处理器添加到   处理器类路径使用annotationProcessor依赖项   配置,如下图所示:

     

依赖{       ...       annotationProcessor'com.google.dagger:dagger-compiler:'}

     

该插件假设依赖是一个注释处理器,如果它的JAR   文件包含以下文件:META-   INF /服务/ javax.annotation.processing.Processor。如果插件   检测编译类路径上的注释处理器,即构建   失败,您会收到一条列出每个注释的错误消息   编译类路径上的处理器。要修复错误,只需更改即可   使用annotationProcessor的那些依赖项的配置。如果   依赖包括还需要在编译上的组件   classpath,第二次声明该依赖项并使用编译   依赖配置。

答案 1 :(得分:33)

我遇到了类似的错误。我按照Google链接上的说明进行操作。

尝试将以下说明添加到您的应用程序gradle文件中:

defaultConfig {
    applicationId "com.yourdomain.yourapp"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"

    javaCompileOptions {
        annotationProcessorOptions {
            includeCompileClasspath false
        }
    }
}

注意 - > includeCompileClasspath false

答案 2 :(得分:21)

将此代码添加到您的gradle应用

defaultConfig{
    javaCompileOptions {
        annotationProcessorOptions {
            includeCompileClasspath true
        }
    }
}

我在这里找到了解决方案https://github.com/JakeWharton/butterknife/issues/908

答案 3 :(得分:11)

只需使用Annotation处理器更新您的黄油刀

compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

我希望它对你有帮助

答案 4 :(得分:3)

#home-link.active { background-color: blue; } #central-link.active { background-color: green; }

中添加此内容

defaultConfig

答案 5 :(得分:2)

在build.gradle(模块应用程序)

  1. 应用插件:

     apply plugin: 'com.jakewharton.butterknife'
    
  2. 在依赖项部分添加以下行:

     annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
     implementation 'com.jakewharton:butterknife:8.7.0'
    
  3. 在build.gradle(Project:projectName)中的

    ,在依赖关系中添加classPath,如下所示:

        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
    

    它将解决此问题。 如果没有,那么添加maven:

     maven {
     url 'https://maven.google.com'
     }
    

答案 6 :(得分:0)

如果您对包含您不需要的注释处理器的编译类路径有依赖关系,则可以通过将以下内容添加到build.gradle文件来禁用错误检查。请记住,添加到编译类路径的注释处理器仍未添加到处理器类路径中。

from subprocess import call
call(["ping", "localhost"])

如果您在迁移到新的依赖项解析策略时遇到问题,可以通过设置includeCompileClasspath true将行为恢复到Android插件2.3.0的行为。但是,不建议将行为还原到版本2.3.0,并且将在以后的更新中删除执行此操作的选项。

有关详情,请参阅此处https://developer.android.com/r/tools/annotation-processor-error-message.html

答案 7 :(得分:0)

如果上述答案无效,请添加以下步骤,特别是Android Studio 3.0.1的新更新:

Android Studio 3.0.1:

将其添加到依赖项中的app.gradle文件中:

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

答案 8 :(得分:0)

在该插件的早期版本中,对编译类路径的依赖项已自动添加到处理器类路径中。也就是说,您可以将注释处理器添加到编译类路径中,并且它将按预期工作。但是,这会通过向处理器添加大量不必要的依赖关系而对性能产生重大影响。

使用Android插件3.0.0时,必须使用注释处理器依赖项配置将注释处理器添加到处理器类路径,如下所示:

dependencies { ... annotationProcessor 'com.google.dagger:dagger-compiler:<version-number>' implementation 'com.google.dagger:dagger-compiler:<version-number>' }