【问题标题】:How do I use custom Java Annotation Processor in Gradle?如何在 Gradle 中使用自定义 Java 注释处理器?
【发布时间】:2014-09-03 16:34:08
【问题描述】:

我一直在开发一个简单的 Java 注释处理器,它扩展了 AbstractProcessor

我已经能够使用 javac -Processor MyProcessor mySource.java 成功测试这个

问题是使用 Android Studio 将其集成到一个简单的 Hello World android 应用程序中。

我首先创建了一个新的 Android 项目,然后添加了一个单独的模块,其中放置了我的所有注释处理器代码(MyProcessor 类以及它使用的自定义注释)。

然后我将这个新模块添加为 HelloWorld android 项目的依赖项。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':MyProcessorModule')
}

然后如何使用处理器根据 HelloWorld 应用程序中的所有源文件生成代码?

【问题讨论】:

  • 我想念您在手动编译时使用的用于 Gradle 的 compilerArgs。
  • 你终于找到了做这件事的正确方法了吗?

标签: java android gradle android-studio annotation-processing


【解决方案1】:

有一个插件可以让它工作。它与 Maven 上的模块完美配合,不确定本地 .jar 文件,但你一定要试一试:

这里是插件页面:https://bitbucket.org/hvisser/android-apt

这里是我的 build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        ... add this classpath to your buildscript dependencies
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' << apply the plugin after the android plugin

dependencies {
    // in dependencies you call it
    apt 'com.company.myAnnotation:plugin:1.0-SNAPSHOT'
    compile 'com.company.myAnnotation:api:1.0-SNAPSHOT'

它应该可以工作。

【讨论】:

  • 它也适用于本地 jar:apt files('libs/locallib.jar')
  • 它也适用于本地 jar:annotationProcessor files('libs/locallib.jar')
【解决方案2】:

使用android-apt 插件。更好的是,fork 一个已经使用 android-apt 插件开发本地注释处理器的sample project

阅读sample project here

【讨论】:

    【解决方案3】:

    您所做的是完全正确的,这是我用作库的项目之一的示例:

    dependencies {
        compile project(':boundservice')
    }
    

    当然,您还应该将添加库的模块定义为

    android-library plagin 而不是应用程序。

    如果你使用New Module -> Android Library 选项,这应该会自动发生,但也许作为这个项目,据我所知......与 Android 无关,你应该选择 Java Library 选项.

    当您这样做并同步 build.gradle 文件(也许稍微干净的构建也应该有所帮助)时,您应该能够在 Android 项目中使用您的类文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多