annotation-processing 相关问题

注释处理器是Java编译器的插件。注释处理器可以执行诸如分析声明,导致编译错误和生成新编译单元之类的操作。

有没有办法让 Java 自定义注释处理器与 RetentionPolicy SOURCE 一起工作?

我创建了一个 Java 自定义注释处理器,以 RetentionPolicy 作为源,为我生成个性化代码,就像 Lombok 的 Getter & Setter 一样。 不幸的是它没有成功,因为

回答 1 投票 0

Java 注解处理 - 获取构造函数值

是否可以在注释处理器中获取枚举常量的构造函数参数的值? 我有一个枚举,它定义了一个构造函数并被扫描,因为它也被注释了。 @

回答 1 投票 0

Lombok 类未生成

我使用的是Intellij IDEA Community Edition(最新版本:Build #IC-242.23339.11,构建于2024年9月25日) 这是我的 build.gradle 文件: 插件{ id 'java' id 'org.springframework...

回答 1 投票 0

为什么当给定 int 原始类型时 directSupertypes(TypeMirror) 返回空列表?

如果我在表示 int 的 TypeMirror 上调用 javax.lang.model.util.Types#directSupertypes(TypeMirror) ,则生成的 List 为空。 Java 语言规范指出...的直接超类型...

回答 1 投票 0

如何修复 Java 注释处理器中的“无法调用 'com.sun.tools.javac.code.Symbol$MethodSymbol.flags()' 因为 'rc.accessor' 为 null”?

我正在使用 Java 注释处理器,遇到 NullPointerException 并显示以下错误消息: 编译器(21.0.3)发生异常。请针对...

回答 1 投票 0

从lombok源码打开jdk.compile的方法

我参考了lombok.在jdk21中打开jdk.compile的方法,在注解处理器的初始化阶段打开jdk.complie 私有静态无效 addOpensForLombok() { C...

回答 1 投票 0

无法访问类 com.sun.tools.javac.api.JavacTrees(在 jdk.compiler 模块中)

我使用java21定制了一个注释处理程序。注释处理器所在项目的pom文件如下所示: 我使用 java21 定制了一个注释处理程序。注释处理器所在项目的pom文件如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>xxx-xx</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>xxx-xx-xx</artifactId> <packaging>jar</packaging> <name>async-log-client</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.auto.service</groupId> <artifactId>auto-service</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>21</source> <target>21</target> <encoding>UTF-8</encoding> <compilerArgs> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> </plugins> </build> </project> 我使用 mvn clean install 命令打包到本地存储库。当我将其用作其他项目的依赖项时,出现以下错误 class org.example.MyCustomProcessor (in unnamed module @0x3b48e183) cannot access class com.sun.tools.javac.api.JavacTrees (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.api to unnamed module @0x3b48e183 我尝试在使用该自定义注释处理器的项目中导入 jdk 模块。 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>21</source> <target>21</target> <encoding>UTF-8</encoding> <compilerArgs> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> </plugins> </build> 但是好像还是不行。我的目标是构建一个类似 lombok 的注释处理器项目。其他项目可以直接依赖它来运行注释处理器 根据您提供的github上的项目,解决方案如下: pom.xml 将 google.auto.service.version 从 1.0 修改为 1.0-rc1 <properties> ... <google.auto.service.version>1.0-rc1</google.auto.service.version> ... </properties> AsyncLogProcessor.java async-log-main/async-log-client/src/main/java/org/example/async/log/client/annotation/AsyncLogProcessor.java 3号线 import com.google.auto.service.AutoService; 打开 auto-service-1.0.jar 并查找 /com/google/auto/service/。 AutoService.class 不存在。 打开 auto-service-1.0-rc1.jar 并查找 /com/google/auto/service/。 AutoService.class 存在。 只有1.0-rc1版本可以支持您的代码(导入com.google.auto.service.AutoService)

回答 1 投票 0

Java 注解处理器在编译期间不会被执行

我目前正在尝试实现一个小型有趣的库,它通过使用阳极处理在编译时自动生成夹具类:https://github.com/floydkretschmar/fixturize/tree/main/

回答 1 投票 0

annotationProcessors 多模块项目 Java

我最近开始学习java处理器并尝试将它们与gradle一起使用, 当我构建项目时,我可以看到打印了注释处理器 jar(其他模块)(我在应用程序中添加了它

回答 2 投票 0

有没有办法将Java注释处理错误与其他编译错误分开?

我有一个包含 1000 多个 Java 源文件的 Maven 模块。其中一些具有通过处理器 Dagger 和 Immutables 处理的注释,每个处理器都会生成代码。当我在 D 中出错时...

回答 1 投票 0

在没有实体的文件中进行 Hibernate 本机查询

我首先选择放置一些 @NamedNativeQueries 的位置是定义数据传输对象(POJO,如果我使用它们的话可能是一条记录)的文件中。但 DTO 不是一个实体,所以 Hiber...

回答 2 投票 0

Kotlin Poet 模糊导入

假设我的项目中有两个接口: 接口 接口A { // ... 接口监听器{ // ... } } 接口 接口B { // ... 接口监听器{ /...

回答 1 投票 0

如何使用注释处理器从 src/main/resources 读取文件?

我有一个简单的注释处理器,需要从与注释类相同的项目中读取配置文件。结构示例: - 我的项目 - 源代码 - 主要的 - 爪哇 ...

回答 6 投票 0

TypeKind.UNION在Java中代表什么?

我正在实现一个注释处理器。我注意到存在一个名为 TypeKind.UNION 的 javax.lang.model.type.TypeKind 。这到底代表什么,又会如何遇到一个类型……

回答 1 投票 0

Gradle 注释处理器依赖项

总体思路: 我想在 Gradle 和 Java 17(Gradle 7.5、Java 17.0.6)上构建一个简单的注释处理器。并在具有相同设置的另一个项目中使用它。 这是我的代码: 注释处理器

回答 2 投票 0

使用Java的注释处理器生成测试源

我正在使用 java 注释处理器根据项目中的注释生成代码,并且运行良好。我正在使用 AbstractProcessor,并像这样编写输出文件: 档案管理器...

回答 1 投票 0

注释处理器生成像lombok这样的类

嗨,我开始使用 gradle 在 Java 中学习注释处理,遵循多项目结构: 根 | |-sample # 包含主要类 |-annotation # 处理器读取的注释 |-处理器#

回答 1 投票 0

java.lang.annotation.AnnotationTypeMismatchException 尽管类型相同

由于上游依赖项发生一些变化,我最近不得不将项目从 Java 11 升级到 Java 17。该项目大量使用注释驱动的代码生成,自从升级以来,我

回答 1 投票 0

Android javax.annotation.processing 包丢失

我想根据以下链接中的示例进行一些注释处理:http://www.zdnetasia.com/writing-and-processing-custom-annotations-part-3-39362483.htm。 不过,我会...

回答 10 投票 0

解析 Javadoc 时链接的完全限定类名

在 Java 注释处理器中,我使用 DocTrees#getDocCommentTree(Element) 来获取 DocCommentTree,我与访问者一起走过它。为找到的{...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.