问题标签 [annotation-processor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1935 浏览

java - 使用自定义运行时注释设置属性值

我正在尝试提出一个自定义注释,想看看我的用例是否适合使用自定义注释的允许方式。

我想复制 Spring @Value 所做的,但不是从属性中读取属性,而是我想要自定义的东西。

我希望在注释处理器中,我解密值并设置为字段 someEncryptedValue。

我得到了变量,它的返回类型和所有东西,但不确定如何从这个注释中设置变量的值,即使我弄清楚了,这是使用自定义注释的好方法。

*注意:这可能是示例,我打算做的比上面的示例要复杂得多。

0 投票
0 回答
644 浏览

android - Android apt 插件不兼容,请改用“annotationProcessor”配置

嗨,我正在尝试在我的应用程序中实现imgly SDK,但是当我在 Build.Gradle 文件中添加 sdk 编译时出现此错误。我尝试添加annotationProcessor "com.google.dagger:dagger-compiler:2.6"但仍然无法正常工作

错误:android-apt 插件与 Android Gradle 插件不兼容。请改用“annotationProcessor”配置。

0 投票
0 回答
850 浏览

java - MapStruct 中的嵌套目标(使用 Lombok)不能流畅地工作

我正在尝试使用 Mapstruct 和 Lombok 进行一些嵌套映射。根据他们的最新规范,mapstruct 1.2 与 Lombok 一起开箱即用。

这是我的代码:

源类

目标类

映射器

正如所写的那样,MapStruct 现在可以开箱即用地与 Lombok 一起使用,这意味着映射代码应该可以工作。但相反,它给了我一个编译错误“它找不到 setter setTargetPrime”。

但令人惊讶的是,如果我只为 targetPrime 添加 getter/setter 并保持原样,那么它在 Lombok 上工作得很好。

例如。

更新的目标

然后运行这个

我将获得所有映射的成功输出。

输出

Target(targetString=Testing, integer=10, targetPrime=TargetPrime(aLong=15, string=AutoScanned, targetPrimePrime=TargetPrime(value=12345)))

因此,由于我的团队非常喜欢 Lombok,因此我无法从我正在从事的所有项目中删除 Lombok,因此 Lombok 是否真的可以开箱即用地进行映射(可变对象),如果是,我在做什么错在上面的代码中?

0 投票
1 回答
5328 浏览

android - 现在必须显式声明 Kapt 注释处理器

我正在尝试开发 Kotlin AnnotationProcessor 库,但我不知道为什么会出现此错误:

错误:任务“:app:javaPreCompileDebug”的执行失败。
> 现在必须显式声明注释处理器。发现编译类路径的以下依赖项包含注释处理器。请将它们添加到 annotationProcessor 配置中。
    - compiler.jar (project :compiler)
  或者,设置 android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true 以继续之前的行为。请注意,此选项已弃用,将来将被删除。
  有关更多详细信息,请参阅https://developer.android.com/r/tools/annotation-processor-error-message.html

我知道如上所述我可以使用includeCompileClasspath = true并且我尝试过它并且它工作正常。但正如所提到的,它已被弃用,很快被删除,并且预计将用于您根据 android doc 不使用的库。

所以我正在寻找更清洁的解决方案。

应用模块

你好.kt

构建.gradle

依赖项{ kapt project(":compiler") compileOnly project(":compiler") implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" }

编译器模块

HelloGenerated.kt

我也试过没有 Target 和 Retention 并且有同样的问题

HelloGenerator.kt

构建.gradle

资源/META-INF/services/javax.annotation.processing.Processor

我现在正在寻找一种更清洁的解决方案,而不仅仅是includeCompileClasspath = true.

一些信息:

  • kapt 效果很好,我将它与 Dagger 和 BindingAdapter 一起使用没有任何问题
  • 我的注释处理器在构建时处理得很好,日志中的消息是我设置时的好消息includeCompileClasspath = true

非常感谢

0 投票
1 回答
4112 浏览

java - 在 Gradle 4.6 版中应用 annotationProcessor

我很难建立我的项目。我正在使用匕首 2,因此我需要使用注释处理器。我使用带有以下版本的 gradle wrapper 4.6 版:

查看文档,他们在 4.6 中添加了开箱即用的注释处理器支持(无需使用任何插件)。我正在尝试使用相同的方法。现在,由于我没有设置 annotationProcessorPath,它应该自动使用构建路径,因为默认值是null - annotationProcessorPath 文档。但似乎情况并非如此。我的 Dagger 类正在build/classes/java/main中正确生成,但它们没有被拾取。为了构建类,我在本地安装了 Java 8(控制台输出):

我正在使用以下命令运行 gradle:./gradlew clean build 为了证明我使用的是正确的版本,我运行了命令:./gradlew -version并得到了这个控制台输出:

因此,在运行 build 时./gradlew build,我得到以下输出:

这是应用程序文件:

任何想法我做错了什么?我可以看到在xyz.blackmonster.resume.config中生成的匕首文件。Gradle 将需要使用那些已编译的文件,但由于某种原因不会“找到”这些文件。我将不胜感激任何有价值的意见。

0 投票
2 回答
441 浏览

java - 调试我的 Java 注释处理器时断点未命中 IntelliJ

我按照Hannes Dorfmann 的教程编写了一个 Java 注释处理器。我的项目使用 Maven。当我尝试按照本文中的建议对其进行调试时mvnDebug一切正常,除了我的断点没有在 IntelliJ 中命中。

  1. 我可以从命令行运行mvnDebug clean compile
  2. 我可以使用远程调试目标附加 IntelliJ 的调试器。
  3. 我的注释处理器运行正常。我已processingEnv.getMessager().printMessage在该方法中添加了语句,process并且它们已正确记录。
  4. 唯一不起作用的是断点。我设置的断点都没有被命中。

我尝试了几件事:更改远程调试目标的类路径,不同版本的 maven-compiler-plugin,该插件的不同选项(fork,...),没有任何帮助。

我错过了什么?

0 投票
1 回答
1825 浏览

java - Android studio 3.1 无法识别 jar 注释处理

我正在尝试在我的 android studio 项目中实现我自己的注释处理器。在我将这个简单的行添加到 build.gradle 依赖块之前,一切都运行良好并且正在编译:

那时我在编译时收到此错误:

找不到:处理器:。要求:project :app 在 build.gradle 文件中搜索

我遵循了无尽的教程,似乎没有任何帮助。我最近刚刚升级到 AS 3.1,并认为它可能相关?

这是项目结构:(请注意 - 在这里我将注释处理器添加为 jar 文件。我还附加了一个图像,试图将其作为不同的模块和相同的结果)

在此处输入图像描述

这是一个不同的我正在尝试添加它 - 在同一个项目中使用不同的模块创建注释处理器,但仍然不行:

在此处输入图像描述

图片中的一些额外信息...项目结构:

在此处输入图像描述

应用程序构建:

在此处输入图像描述

处理器构建:

在此处输入图像描述

注解:

在此处输入图像描述

主要活动:

在此处输入图像描述

处理器实现:

在此处输入图像描述

0 投票
1 回答
3592 浏览

android - 无法在 Kotlin 中构建注释处理器

我目前正在尝试在 Kotlin 中为 Android 编写注释处理器。项目结构如下:

项目/build.gradle

注释/build.gradle

示例/build.gradle

注释.kt

注释处理器.kt

使用 kapt 构建中断 sample:javaPreCompileDebug 并显示以下消息:

当我用 annotationProcessor 替换 kapt 时,构建在 sample:transformClassesWithInstantRunForDebug 上中断,并显示以下消息:

当我禁用即时运行时,一切正常。

我现在的问题是,我的配置哪里出错了?我遵循了这样的示例项目我看到的唯一重大区别是注释模块分为两个(运行时和编译器)。但错误消息表明 Kotlin 或 Instant Run 存在问题。

0 投票
1 回答
183 浏览

java - 使用多个 AnntationProcessor 找不到 FluentFuture 类

我正在使用 Maven 和自定义 AnnotationProcessor 开发一个简单的 Java 8 项目。

如果我只使用Dagger 2 .15 或我的 AnnotationProcessor,它运行良好,但如果我同时使用它们,maven 构建将失败并出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project MyProject: Fatal error compiling: java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FluentFuture: com.google.common.util.concurrent.FluentFuture -> [Help 1]

我尝试从存储库(版本 r05、19.0、24.1-jre)导入com.google.common.util.concurrent.FluentFuture类,但没有成功。com.google.guava.guava

项目结构:

  • 有一个Maven项目,里面有注解,还有两个AnnotationProcessor(一个只验证,另一个生成源代码)(根据这篇文章)
  • 还有另一个 Maven 项目,它使用这个项目作为依赖项。在那我想使用 Dagger 2 进行依赖注入(我导入它就像它在 Dagger 2 页面中的描述中一样)。

我能做些什么?

谢谢您的帮助!

0 投票
1 回答
1165 浏览

android - 如何在 android.mk 中使用 annotationProcessor

我只想使用bufferknife并且drag2在我的系统应用程序中,我已经使用命令构建了我的应用程序mm

我已经尝试了我能找到的所有可能的方法,但都失败了!我只Android.mk通过谷歌搜索找到了以下内容: