- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前对注解处理器的理解是,它指的是预解析文件以查找某些注解、基于该注解生成或更改其他代码的代码。它发生在项目的常规编译阶段之前。
在 gradle 中,我们通常使用 apt、kpt - 我有时看到使用 annotationProcessor
- 表示在“注释处理时间”需要一些依赖。
如果上面的理解是对的,compileOnly
怎么办?与 apt、kpt 等不同?
最佳答案
正如您所说,Gradle 中有几个注释处理解决方案:
annotationProcessor
Android 设备 apt
用于纯 Java 和 Groovy kapt
适用于 Kotlin configuration
用于注释处理。
compile
用于处理的类路径。但这在语义上并不正确,它不是“Gradle 方式”。您不应将仅编译时的依赖项与应用程序运行所需的工件混合在一起。我能想到的一个简单场景是创建胖 JAR:很可能您不想打包和运送您使用过的处理器,因为这毫无意义!可能还有其他场景。
configuration
) 并将其仅用于注释处理,然后就可以忘记它们。这是一种语义:您告诉 Gradle(和其他开发人员),您的应用程序运行不需要这些依赖项。这就是
compileOnly
的地方不同于
apt
:
compileOnly
依赖项是您的代码运行所必需的,但它们是由环境提供的。它是您的应用程序服务器,还是插件主机系统,甚至您将手动将它们添加到类路径中 - 它们将仅存在于您的运行时中,因此您不应将它们与可分发的一起打包。但是它们是您的代码运行所必需的。
compileOnly
的一些例子依赖项是 Servlet API(您的类显然会扩展和使用它们,但它将由服务器提供)或者,如果您正在编写 Jenkins 插件,则 Jenkins 核心 API(您的插件将安装在该核心已经存在的 Jenkins 中) )。 JDK 本身就是一种
compileOnly
也。相反,注释处理器根本不打算在运行时使用。它们不会存在于类路径中,也不需要它们来运行您的应用程序:它们已经生成了一些稍后编译的代码。
In previous versions of the plugin, dependencies on the compile classpath were automatically added to the processor classpath. That is, you could add an annotation processor to the compile classpath and it would work as expected. However, this causes a significant impact to performance by adding a large number of unnecessary dependencies to the processor.
关于gradle - 我可以使用 compileOnly 作为 gradle 中 annotationProcessor 的替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224294/
我正在使用 gradle/querydsl 和 JPA 2.1。 我想使用 APT (QEntities) 生成 querydsl 元数据。 为此,我使用了 gradle-apt-plugin 和 g
以下是我的 build.gradle 文件。我的项目在本地编译(IntelliJ-IDEA 是我的 IDE),但是当我将它推送到 GitHub 时, travis-ci 构建失败。我的 gradle
我写了一个注解处理器。用户可以传递一个选项作为处理器的参数。我也可以在我的注解处理器中读取这个参数。到目前为止一切顺利,一切都按预期进行! 但是,我收到编译器的警告,即传递给注解处理器的选项尚未被任何
我有两个带有方法的类,我想将两个类的方法合并到一个类中。 @Service("ITestService") public interface ITest1 { @Export void m
我按照 JMH 主页中的说明创建了 maven 原型(prototype)项目。我收到“注释生成器抛出异常。java.lang.NullPointerException”当我对生成的项目进行 mave
这个问题已经有答案了: 已关闭13 年前。 Possible Duplicate: Plugging in to Java compilers 编辑 - 这似乎是 Plugging in to Jav
基于 ButterKnife lib,我升级到新版本8.5.1。我用过 compile 'com.jakewharton:butterknife:8.5.1' annotationProcesso
对于插桩测试,我有一个创建 TestComponent 的 TestApplication,但不再生成该文件(Error:/xxx/TestApplication.java: 16: 无法解析 imp
我有一个使用 AnnotationProcessor 处理的类。在此过程中,我有一个 javax.lang.model.element.Element 实例,我可以在其中通过 .getSimpleNa
我希望创建一个注释,它将测试带注释的类型(可能是接口(interface))及其所有子类型,如果任何测试的类型是没有无参数构造函数的具体类,则抛出编译错误。我能够测试实际带有注释的类型,没问题。测试子
这是我在向我的 android 项目添加新的 gradle 依赖项时遇到的以下错误。而且这个错误不是项目特定的。如果我在任何其他 android 项目中添加插件,我会遇到同样的错误 Error whi
我在 IntelliJ IDEA 中创建了简单的注释处理器,添加了注释配置文件,但我不明白如何运行它。我知道注释处理器在编译时工作,但我没有在输出中看到来自注释处理器信使的任何消息。 public c
我正在使用 java 注释处理器在编译时生成其他类。使用 gradle 构建时效果很好,但我无法让 IntelliJ 识别生成的类。每当我尝试在 IntelliJ 中构建项目时,它都会出错,说它找不到
我正在尝试导入 数据库流正如 their readme 中的建议.修改项目级 build.gradle 文件并尝试同步后,出现以下错误: Error:(27, 0) Could not find me
我正在寻找一种方法来检测一个类是否是从注释处理器中的另一个类/接口(interface)继承的。由于注释处理器在源代码上运行而不是运行时,因此无法使用 reflation API,我找到的唯一方法是:
我需要创建一个自定义注释,当该注释应用于方法时,会根据各种检查检查并验证输入参数(原始和非原始)。如果检查失败应该直接返回错误消息。 在搜索时,我在创建自定义注释时遇到了 AbstractProces
我正在编写自定义 AnnotationProcessor 并且需要访问在执行期间设置为 javac 的选项:例如-详细,-s,-d 正确的做法是什么?我不认为解析“sun.java.command”系
问题: 是否可以通过注释处理器访问使用 @Target(ElementType.TYPE_USE) 注释注释的元素? 是否可以通过注解处理器访问注解类型边界? 非常感谢我错过的相关文档链接。 上下文:
我只想在我的系统应用程序中使用 bufferknife 和 drag2,我已经使用命令 mm 构建了我的应用程序。 我已经尝试了所有可能的方法,但都失败了!我只通过谷歌搜索找到了以下 Android.
我正在使用 AndroidAnnotaion,但由于 Android Studio 2.3 和 Gradle 2.3.0,他们说 android-apt 已过时。而 annotationProcess
我是一名优秀的程序员,十分优秀!