问题标签 [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.

0 投票
3 回答
14980 浏览

java - 使用注释处理器替换代码

我正在尝试编写一个注释处理器来在一个类上插入方法和字段......并且文档非常稀疏。我没有走远,我不知道我是否正确接近它。

处理环境提供了一个Filer对象,该对象具有创建新源文件和类文件的方便方法。这些工作正常,但后来我试图弄清楚如何读取现有的源文件,它提供的只是“getResource”。所以在我的处理器实现中,我这样做了:

我的第一个困惑是我不禁觉得element.asType().toString().replace(".", "/") + ".java"(获取限定类型名称并将其转换为包和源文件路径)不是解决问题的好方法。API 的其余部分被过度设计,但似乎没有一种方便的方法来检索原始源代码。

真正的问题是编译器会自发地被输出目录中的第二个源文件(“错误:重复类”)弄乱,现在我被卡住了。

我已经写了剩下的部分——一个宏词法分析器和解析器,以及用于计算一些数据和插入字段值和方法的东西——但它作为编译器之外的初始步骤运行。除了原始文件不能具有 .java 扩展名(以防止编译器看到它们)这一事实之外,这很好用。然后听说注解可以做代码生成,我觉得会比较合适和方便,但是找不到太多的指导。

0 投票
1 回答
682 浏览

java - 如何实例化一个正在“注释处理”的类?

我正在编写一个注释处理器,我需要实例化一个正在处理的类。

我正在根据类及其注释提取一些文档,并且我想从该类运行一个方法并将结果输出到生成的文档中。

不幸的是,当我尝试实例化它时,我有一个ClassNotFoundException对我来说似乎合乎逻辑的处理,因为处理发生在编译轮之前。

我目前正在编写一个包含文档的 xml 文件,也许有注释后处理器或类似的东西?

您对解决方法有任何想法吗?

0 投票
1 回答
1038 浏览

android - IntelliJ IDEA Annotation 处理器:“从项目类路径中获取处理器”

注释处理器设置中的“从项目类路径获取处理器”选项是什么意思?如果我正确理解“从项目类路径获取处理器”选项,它应该扫描类路径并自动找到所有注释处理器。

但是,这似乎不是那样工作的。我有一个将注释处理器添加到项目类路径(android 注释)的项目。When selecting "Obtain processors from project classpath", they are not executed. 我必须在“处理器路径”中明确指定它们才能使它们正常工作。

当我在 Maven 中运行构建时,会执行注释处理器。

这是 IntelliJ IDEA 中的错误还是我只是理解设置错误?

0 投票
1 回答
426 浏览

java - 让 Netbeans 平台注解在 Eclipse 中工作

Netbeans 平台最近引入了基于注释的资源文件生成,例如包和 layer.xml 文件。

在 Netbeans 中拥有一个基于 Maven 的 Netbeans 平台项目(这些注释工作的地方)可以很容易地将相同的项目导入 Eclipse。

但是由于某种原因,即使项目被正确导入(或者至少它似乎被正确导入<--下载了必要的库等),上面提到的注释也不会被 Eclipse 执行。

症状缺少在使用这些注释的类中导入的生成类。

例子:

如上面的示例所示,注释被广泛使用但未被 Eclipse 处理,这导致以下行无法编译,因为 Bundle(应自动生成)未被识别为已知类。

更多信息:

使用的 Eclipse 是 Juno,并且在项目属性中启用了注释处理。

有人知道如何在 Eclipse 中进行这项工作吗?

0 投票
7 回答
62453 浏览

java - Maven 3 - 如何添加注释处理器依赖项?

我需要在我的项目源上运行注释处理器。注释处理器不应成为项目的传递依赖项,因为它仅用于注释处理而没有其他需要。

这是我用于此的完整(非工作)测试 pom:

我在插件配置中明确定义org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor为注释处理器以进行测试,并且我知道它不应该是必需的。

我遇到的问题是hibernate-jpamodelgen依赖项没有添加到编译器类路径中,因此找不到注释处理器并且构建失败。

根据这个答案,我尝试将依赖项添加为构建扩展(不确定我是否理解那些应该是什么!),如下所示:

这也不会添加hibernate-jpamodelgen到编译器类路径中。

到目前为止,我发现唯一有效的是将依赖项添加到该<dependencies>部分的项目中。这有一个不幸的副作用,hibernate-jpamodelgen即我想避免之后添加作为传递依赖项。

我以前的工作设置使用maven-processor-plugin插件来实现我想要的。但是,eclipse m2e 不支持此插件,并且最新版本的maven-compiler-pluginnow 可以正确处理多个编译器参数,因此我宁愿使用后者。

0 投票
3 回答
970 浏览

java - 在编译期间访问 VM 参数

我在我的程序中访问 VM 参数时遇到问题。我正在编写一个注释处理器,我想在其中访问一些 VM 参数。我正在使用 NETBeans IDE。我创建了注释处理器的 jar 文件,然后在另一个具有带有注释的 java 文件的项目中使用它。

现在在我的注释处理器项目中,在 IDE 中我将 VM 参数设置如下

并且在我尝试访问注释处理器的 process() 函数中

它打印空。我们可以在编译期间访问这些 VM 参数吗?因为注释处理器和带注释的类都在同一个 VM 中运行?谢谢

0 投票
1 回答
4192 浏览

java - 现代 Java 注释处理

注释处理是否仍然是 Java 6+ 的一个活跃部分,或者它是否已被弃用/不鼓励/过时。如果过时,为什么(为什么不再需要/有用)?如果它仍然非常有用且“活跃”(针对 Java 6+ JDK 开发的新 Java 项目仍然会从中受益),请确认/纠正我对注释处理器如何使用的理解:

  1. 你创建自己的注释类,比如说@MyAnnotation
  2. 您标记某些类、方法、字段等@MyAnnotation
  3. 在构建过程中,您调用自定义MyAnnotationProcessor如何?
  4. 处理器扫描您的类路径以查找@MyAnnotation
  5. 通常,注释处理器会进行动态字节码注入,即时修改/增强已编译的类
0 投票
0 回答
780 浏览

java - 在注释处理器中使用 StandardLocation 类

我正在使用 NETBeans IDE 开发注释处理器。我已经编写了注释处理器,然后将其转换为 JAR,然后将此 JAR 作为引用库添加到我正在使用注释的另一个 java 应用程序中。

现在我的问题是在注释处理器内部,如果我想访问源文件(被注释的文件)然后我尝试使用下面的代码获取 FileObject

但它返回null。这里的 demo 是带有注释类 MainCopy.java 的包。当我阅读 StandardLocation 类的文档时,它说必须支持它才能工作,有人可以帮我解决这个问题或指导我如何获取 FileObject。

谢谢

0 投票
2 回答
1476 浏览

java - 在junit测试中获取一个类作为javax.lang.model.element.Element

我想测试我的实用程序类 ElementUtils,但我不知道如何将类作为元素。在 AnnotationProcessors 中,我使用以下代码获取我的元素

但由于 RoundEnvironment 在测试中不可用,这不是一个选项。

有没有办法将一个类作为 javax.lang.model.element.Element 获取?

0 投票
3 回答
4096 浏览

java - 访问导入语句的 Java 注释处理 API

我正在编写一个应该生成 java 代码的 AnnotationProcessor。它应该从某些现有接口生成派生接口。

为此,我需要找到原始输入代码的导入语句,以便将其输出到生成的 java 文件中。

如何才能做到这一点?