问题标签 [annotation-processing]
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.
java - 使用注释处理器替换代码
我正在尝试编写一个注释处理器来在一个类上插入方法和字段......并且文档非常稀疏。我没有走远,我不知道我是否正确接近它。
处理环境提供了一个Filer
对象,该对象具有创建新源文件和类文件的方便方法。这些工作正常,但后来我试图弄清楚如何读取现有的源文件,它提供的只是“getResource”。所以在我的处理器实现中,我这样做了:
我的第一个困惑是我不禁觉得element.asType().toString().replace(".", "/") + ".java"
(获取限定类型名称并将其转换为包和源文件路径)不是解决问题的好方法。API 的其余部分被过度设计,但似乎没有一种方便的方法来检索原始源代码。
真正的问题是编译器会自发地被输出目录中的第二个源文件(“错误:重复类”)弄乱,现在我被卡住了。
我已经写了剩下的部分——一个宏词法分析器和解析器,以及用于计算一些数据和插入字段值和方法的东西——但它作为编译器之外的初始步骤运行。除了原始文件不能具有 .java 扩展名(以防止编译器看到它们)这一事实之外,这很好用。然后听说注解可以做代码生成,我觉得会比较合适和方便,但是找不到太多的指导。
java - 如何实例化一个正在“注释处理”的类?
我正在编写一个注释处理器,我需要实例化一个正在处理的类。
我正在根据类及其注释提取一些文档,并且我想从该类运行一个方法并将结果输出到生成的文档中。
不幸的是,当我尝试实例化它时,我有一个ClassNotFoundException
对我来说似乎合乎逻辑的处理,因为处理发生在编译轮之前。
我目前正在编写一个包含文档的 xml 文件,也许有注释后处理器或类似的东西?
您对解决方法有任何想法吗?
android - IntelliJ IDEA Annotation 处理器:“从项目类路径中获取处理器”
注释处理器设置中的“从项目类路径获取处理器”选项是什么意思?如果我正确理解“从项目类路径获取处理器”选项,它应该扫描类路径并自动找到所有注释处理器。
但是,这似乎不是那样工作的。我有一个将注释处理器添加到项目类路径(android 注释)的项目。When selecting "Obtain processors from project classpath", they are not executed. 我必须在“处理器路径”中明确指定它们才能使它们正常工作。
当我在 Maven 中运行构建时,会执行注释处理器。
这是 IntelliJ IDEA 中的错误还是我只是理解设置错误?
java - 让 Netbeans 平台注解在 Eclipse 中工作
Netbeans 平台最近引入了基于注释的资源文件生成,例如包和 layer.xml 文件。
在 Netbeans 中拥有一个基于 Maven 的 Netbeans 平台项目(这些注释工作的地方)可以很容易地将相同的项目导入 Eclipse。
但是由于某种原因,即使项目被正确导入(或者至少它似乎被正确导入<--下载了必要的库等),上面提到的注释也不会被 Eclipse 执行。
症状缺少在使用这些注释的类中导入的生成类。
例子:
如上面的示例所示,注释被广泛使用但未被 Eclipse 处理,这导致以下行无法编译,因为 Bundle(应自动生成)未被识别为已知类。
更多信息:
使用的 Eclipse 是 Juno,并且在项目属性中启用了注释处理。
有人知道如何在 Eclipse 中进行这项工作吗?
java - Maven 3 - 如何添加注释处理器依赖项?
我需要在我的项目源上运行注释处理器。注释处理器不应成为项目的传递依赖项,因为它仅用于注释处理而没有其他需要。
这是我用于此的完整(非工作)测试 pom:
我在插件配置中明确定义org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
为注释处理器以进行测试,并且我知道它不应该是必需的。
我遇到的问题是hibernate-jpamodelgen
依赖项没有添加到编译器类路径中,因此找不到注释处理器并且构建失败。
根据这个答案,我尝试将依赖项添加为构建扩展(不确定我是否理解那些应该是什么!),如下所示:
这也不会添加hibernate-jpamodelgen
到编译器类路径中。
到目前为止,我发现唯一有效的是将依赖项添加到该<dependencies>
部分的项目中。这有一个不幸的副作用,hibernate-jpamodelgen
即我想避免之后添加作为传递依赖项。
我以前的工作设置使用maven-processor-plugin
插件来实现我想要的。但是,eclipse m2e 不支持此插件,并且最新版本的maven-compiler-plugin
now 可以正确处理多个编译器参数,因此我宁愿使用后者。
java - 在编译期间访问 VM 参数
我在我的程序中访问 VM 参数时遇到问题。我正在编写一个注释处理器,我想在其中访问一些 VM 参数。我正在使用 NETBeans IDE。我创建了注释处理器的 jar 文件,然后在另一个具有带有注释的 java 文件的项目中使用它。
现在在我的注释处理器项目中,在 IDE 中我将 VM 参数设置如下
并且在我尝试访问注释处理器的 process() 函数中
它打印空。我们可以在编译期间访问这些 VM 参数吗?因为注释处理器和带注释的类都在同一个 VM 中运行?谢谢
java - 现代 Java 注释处理
注释处理是否仍然是 Java 6+ 的一个活跃部分,或者它是否已被弃用/不鼓励/过时。如果过时,为什么(为什么不再需要/有用)?如果它仍然非常有用且“活跃”(针对 Java 6+ JDK 开发的新 Java 项目仍然会从中受益),请确认/纠正我对注释处理器如何使用的理解:
- 你创建自己的注释类,比如说
@MyAnnotation
- 您标记某些类、方法、字段等
@MyAnnotation
- 在构建过程中,您调用自定义
MyAnnotationProcessor
(如何?) - 处理器扫描您的类路径以查找
@MyAnnotation
- 通常,注释处理器会进行动态字节码注入,即时修改/增强已编译的类
java - 在注释处理器中使用 StandardLocation 类
我正在使用 NETBeans IDE 开发注释处理器。我已经编写了注释处理器,然后将其转换为 JAR,然后将此 JAR 作为引用库添加到我正在使用注释的另一个 java 应用程序中。
现在我的问题是在注释处理器内部,如果我想访问源文件(被注释的文件)然后我尝试使用下面的代码获取 FileObject
但它返回null。这里的 demo 是带有注释类 MainCopy.java 的包。当我阅读 StandardLocation 类的文档时,它说必须支持它才能工作,有人可以帮我解决这个问题或指导我如何获取 FileObject。
谢谢
java - 在junit测试中获取一个类作为javax.lang.model.element.Element
我想测试我的实用程序类 ElementUtils,但我不知道如何将类作为元素。在 AnnotationProcessors 中,我使用以下代码获取我的元素
但由于 RoundEnvironment 在测试中不可用,这不是一个选项。
有没有办法将一个类作为 javax.lang.model.element.Element 获取?
java - 访问导入语句的 Java 注释处理 API
我正在编写一个应该生成 java 代码的 AnnotationProcessor。它应该从某些现有接口生成派生接口。
为此,我需要找到原始输入代码的导入语句,以便将其输出到生成的 java 文件中。
如何才能做到这一点?