解决Maven构建grpcDemo1项目时的Generated类缺失编译错误
Maven编译失败:找不到javax.annotation.Generated的解决办法
问题根源
gRPC生成的userGrpc.java文件中引用了javax.annotation.Generated类,但该类在Java 9及以上版本的JDK中不再默认包含,或项目未引入对应依赖,导致Maven编译时报错。
具体解决办法
方案1:添加javax.annotation-api依赖
在pom.xml的<dependencies>节点中加入以下依赖,直接提供缺失的类:
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> <scope>compile</scope> </dependency>
方案2:修改gRPC插件配置,改用JDK自带注解
如果项目使用Java 11+,可以让gRPC代码生成器使用JDK自带的javax.annotation.processing.Generated注解(注意包名差异)。在pom.xml的protobuf-maven-plugin配置中添加参数:
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <protocArtifact>com.google.protobuf:protoc:3.21.7:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.51.0:exe:${os.detected.classifier}</pluginArtifact> <!-- 新增配置:指定生成注解类型 --> <protocPlugins> <protocPlugin> <id>grpc-java</id> <groupId>io.grpc</groupId> <artifactId>protoc-gen-grpc-java</artifactId> <version>1.51.0</version> <parameters> <parameter>generatedAnnotationType=javax.annotation.processing.Generated</parameter> </parameters> </protocPlugin> </protocPlugins> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>compile-custom</goal> </goals> </execution> </executions> </plugin>
修改后重新生成代码,就会使用JDK自带的注解,无需额外依赖。
方案3:指定Java 8编译版本(仅适用于Java 8项目)
如果项目基于Java 8,确保maven-compiler-plugin明确指定编译版本为1.8,Java 8的JDK默认包含该注解:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
验证操作
修改pom.xml后,执行以下命令重新编译项目:
mvn clean compile
内容的提问来源于stack exchange,提问作者anshikagupta26
相关产品推荐
相关产品推荐

