jprotobuf icon indicating copy to clipboard operation
jprotobuf copied to clipboard

编译失败,动态生成的类在被动态编译时,无法找到import的类,无法生成proto文件 。

Open JustWayIs opened this issue 4 years ago • 9 comments

JDK版本:8 jprotobuf版本: 2.4.3

JDK版本、maven版本、jprotobuf版本、编译插件版本都换了,还是不行

[INFO] [INFO] --- jprotobuf-precompile-plugin:2.2.2:precompile (default) @ jprotobuf-project --- [INFO] * filterClassPackages='[com.game]' [INFO] * generateProtofile='true' [INFO] * compileDependencies='true' [WARNING] java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at com.baidu.jprotobuf.mojo.PreCompileMojo$1.run (PreCompileMojo.java:322) at java.lang.Thread.run (Thread.java:745) Caused by: jodd.io.findfile.FindFileException: Scan entry error: EntryData{com.game.MessaageRequest'}; <--- java.lang.IllegalStateException: Compilation failed. class: com.game.MessaageRequest$$JProtoBufClass, diagnostics: [MessaageRequest$$JProtoBufClass.java:5: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 import com.baidu.bjf.remoting.protobuf.; ^, MessaageRequest$$JProtoBufClass.java:9: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 import com.baidu.bjf.remoting.protobuf.FieldType; ^, MessaageRequest$$JProtoBufClass.java:11: 错误: 程序包com.baidu.bjf.remoting.protobuf.utils不存在 import com.baidu.bjf.remoting.protobuf.utils.; ^, MessaageRequest$$JProtoBufClass.java:13: 错误: 程序包com.google.protobuf不存在 import com.google.protobuf.; ^, MessaageRequest$$JProtoBufClass.java:21: 错误: 程序包com.baidu.bjf.remoting.protobuf.code不存在 import com.baidu.bjf.remoting.protobuf.code.; ^, MessaageRequest$$JProtoBufClass.java:24: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 public class MessaageRequest$$JProtoBufClass implements com.baidu.bjf.remoting.protobuf.Codec<com.game.MessaageRequest>{ ^, MessaageRequest$$JProtoBufClass.java:25: 错误: 程序包com.google.protobuf.Descriptors不存在 private com.google.protobuf.Descriptors.Descriptor descriptor; ^, MessaageRequest$$JProtoBufClass.java:62: 错误: 找不到符号 public void doWriteTo(com.game.MessaageRequest t, CodedOutputStream output) ^ 符号: 类 CodedOutputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:85: 错误: 找不到符号 public void writeTo(com.game.MessaageRequest t, CodedOutputStream output) ^ 符号: 类 CodedOutputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:90: 错误: 找不到符号 public com.game.MessaageRequest readFrom(CodedInputStream input) throws IOException { ^ 符号: 类 CodedInputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:146: 错误: 程序包com.google.protobuf.Descriptors不存在 public com.google.protobuf.Descriptors.Descriptor getDescriptor() throws IOException { ^] at jodd.io.findfile.ClassFinder.scanEntry (ClassFinder.java:377) at jodd.io.findfile.ClassFinder.scanClassFile (ClassFinder.java:324) at jodd.io.findfile.ClassFinder.scanClassPath (ClassFinder.java:307) at jodd.io.findfile.ClassFinder.scanPath (ClassFinder.java:239) at jodd.io.findfile.ClassFinder.scanPaths (ClassFinder.java:178) at jodd.io.findfile.ClassScanner.scan (ClassScanner.java:35) at jodd.io.findfile.ClassScanner.scanDefaultClasspath (ClassScanner.java:28) at com.baidu.jprotobuf.mojo.JprotobufPreCompileMain.main (JprotobufPreCompileMain.java:150) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at com.baidu.jprotobuf.mojo.PreCompileMojo$1.run (PreCompileMojo.java:322) at java.lang.Thread.run (Thread.java:745) Caused by: java.lang.Exception: Compilation failed. class: com.game.MessaageRequest$$JProtoBufClass, diagnostics: [MessaageRequest$$JProtoBufClass.java:5: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 import com.baidu.bjf.remoting.protobuf.; ^, MessaageRequest$$JProtoBufClass.java:9: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 import com.baidu.bjf.remoting.protobuf.FieldType; ^, MessaageRequest$$JProtoBufClass.java:11: 错误: 程序包com.baidu.bjf.remoting.protobuf.utils不存在 import com.baidu.bjf.remoting.protobuf.utils.; ^, MessaageRequest$$JProtoBufClass.java:13: 错误: 程序包com.google.protobuf不存在 import com.google.protobuf.; ^, MessaageRequest$$JProtoBufClass.java:21: 错误: 程序包com.baidu.bjf.remoting.protobuf.code不存在 import com.baidu.bjf.remoting.protobuf.code.; ^, MessaageRequest$$JProtoBufClass.java:24: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 public class MessaageRequest$$JProtoBufClass implements com.baidu.bjf.remoting.protobuf.Codec<com.game.MessaageRequest>{ ^, MessaageRequest$$JProtoBufClass.java:25: 错误: 程序包com.google.protobuf.Descriptors不存在 private com.google.protobuf.Descriptors.Descriptor descriptor; ^, MessaageRequest$$JProtoBufClass.java:62: 错误: 找不到符号 public void doWriteTo(com.game.MessaageRequest t, CodedOutputStream output) ^ 符号: 类 CodedOutputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:85: 错误: 找不到符号 public void writeTo(com.game.MessaageRequest t, CodedOutputStream output) ^ 符号: 类 CodedOutputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:90: 错误: 找不到符号 public com.game.MessaageRequest readFrom(CodedInputStream input) throws IOException { ^ 符号: 类 CodedInputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:146: 错误: 程序包com.google.protobuf.Descriptors不存在 public com.google.protobuf.Descriptors.Descriptor getDescriptor() throws IOException { ^] at com.baidu.jprotobuf.mojo.JprotobufPreCompileMain$1.onEntry (JprotobufPreCompileMain.java:121) at jodd.io.findfile.ClassFinder.scanEntry (ClassFinder.java:375) at jodd.io.findfile.ClassFinder.scanClassFile (ClassFinder.java:324) at jodd.io.findfile.ClassFinder.scanClassPath (ClassFinder.java:307) at jodd.io.findfile.ClassFinder.scanPath (ClassFinder.java:239) at jodd.io.findfile.ClassFinder.scanPaths (ClassFinder.java:178) at jodd.io.findfile.ClassScanner.scan (ClassScanner.java:35) at jodd.io.findfile.ClassScanner.scanDefaultClasspath (ClassScanner.java:28) at com.baidu.jprotobuf.mojo.JprotobufPreCompileMain.main (JprotobufPreCompileMain.java:150) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at com.baidu.jprotobuf.mojo.PreCompileMojo$1.run (PreCompileMojo.java:322) at java.lang.Thread.run (Thread.java:745) Caused by: java.lang.IllegalStateException: Compilation failed. class: com.game.MessaageRequest$$JProtoBufClass, diagnostics: [MessaageRequest$$JProtoBufClass.java:5: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 import com.baidu.bjf.remoting.protobuf.; ^, MessaageRequest$$JProtoBufClass.java:9: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 import com.baidu.bjf.remoting.protobuf.FieldType; ^, MessaageRequest$$JProtoBufClass.java:11: 错误: 程序包com.baidu.bjf.remoting.protobuf.utils不存在 import com.baidu.bjf.remoting.protobuf.utils.; ^, MessaageRequest$$JProtoBufClass.java:13: 错误: 程序包com.google.protobuf不存在 import com.google.protobuf.; ^, MessaageRequest$$JProtoBufClass.java:21: 错误: 程序包com.baidu.bjf.remoting.protobuf.code不存在 import com.baidu.bjf.remoting.protobuf.code.; ^, MessaageRequest$$JProtoBufClass.java:24: 错误: 程序包com.baidu.bjf.remoting.protobuf不存在 public class MessaageRequest$$JProtoBufClass implements com.baidu.bjf.remoting.protobuf.Codec<com.game.MessaageRequest>{ ^, MessaageRequest$$JProtoBufClass.java:25: 错误: 程序包com.google.protobuf.Descriptors不存在 private com.google.protobuf.Descriptors.Descriptor descriptor; ^, MessaageRequest$$JProtoBufClass.java:62: 错误: 找不到符号 public void doWriteTo(com.game.MessaageRequest t, CodedOutputStream output) ^ 符号: 类 CodedOutputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:85: 错误: 找不到符号 public void writeTo(com.game.MessaageRequest t, CodedOutputStream output) ^ 符号: 类 CodedOutputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:90: 错误: 找不到符号 public com.game.MessaageRequest readFrom(CodedInputStream input) throws IOException { ^ 符号: 类 CodedInputStream 位置: 类 com.game.MessaageRequest$$JProtoBufClass, MessaageRequest$$JProtoBufClass.java:146: 错误: 程序包com.google.protobuf.Descriptors不存在 public com.google.protobuf.Descriptors.Descriptor getDescriptor() throws IOException { ^] at com.baidu.bjf.remoting.protobuf.utils.compiler.JdkCompiler.doCompile (JdkCompiler.java:202) at com.baidu.bjf.remoting.protobuf.utils.compiler.AbstractCompiler.compile (AbstractCompiler.java:43) at com.baidu.bjf.remoting.protobuf.ProtobufProxy.doCreate (ProtobufProxy.java:408) at com.baidu.bjf.remoting.protobuf.ProtobufProxy.create (ProtobufProxy.java:311) at com.baidu.bjf.remoting.protobuf.ProtobufProxy.create (ProtobufProxy.java:276) at com.baidu.jprotobuf.mojo.JprotobufPreCompileMain$1.onEntry (JprotobufPreCompileMain.java:111) at jodd.io.findfile.ClassFinder.scanEntry (ClassFinder.java:375) at jodd.io.findfile.ClassFinder.scanClassFile (ClassFinder.java:324) at jodd.io.findfile.ClassFinder.scanClassPath (ClassFinder.java:307) at jodd.io.findfile.ClassFinder.scanPath (ClassFinder.java:239) at jodd.io.findfile.ClassFinder.scanPaths (ClassFinder.java:178) at jodd.io.findfile.ClassScanner.scan (ClassScanner.java:35) at jodd.io.findfile.ClassScanner.scanDefaultClasspath (ClassScanner.java:28) at com.baidu.jprotobuf.mojo.JprotobufPreCompileMain.main (JprotobufPreCompileMain.java:150) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at com.baidu.jprotobuf.mojo.PreCompileMojo$1.run (PreCompileMojo.java:322) at java.lang.Thread.run (Thread.java:745) [INFO] JProtobuf pre compile done time took: 185ms

JustWayIs avatar Jun 16 '20 06:06 JustWayIs

我也有相同的问题

yanhuilin avatar Jan 13 '21 06:01 yanhuilin

how is it now?

gopiedpiper avatar Jul 19 '21 10:07 gopiedpiper

同样的问题,请问作者是否有解决?

wzx996 avatar Jul 23 '21 01:07 wzx996

是第一次遇到吗? 执行时 加 mvn clean 试一下呢? 如果 还不行,试一下 升级版本 jprotobuf 2.4.9 plugin 2.2.6

jhunters avatar Jul 23 '21 10:07 jhunters

是第一次遇到吗? 执行时 加 mvn clean 试一下呢? 如果 还不行,试一下 升级版本 jprotobuf 2.4.9 plugin 2.2.6

是第一次遇到吗? 执行时 加 mvn clean 试一下呢? 如果 还不行,试一下 升级版本 jprotobuf 2.4.9 plugin 2.2.6

我用的该版本一直报如下: [ERROR] Failed to execute goal com.baidu:jprotobuf-precompile-plugin:2.2.6:precompile (default) on project e-plan: An exception occured while executing the Java class. null: InvocationTargetException: Scan entry error: EntryData{com.baidu.gmclient.ConfigConfig'}; <--- java.lang.IllegalStateException: Compilation failed. class: com.baidu.gmclient.ConfigConfig$$JProtoBufClass, diagnostics: [警告: 未知的枚举常量 com.baidu.bjf.remoting.protobuf.FieldType.UINT32 [ERROR] 原因: 找不到com.baidu.bjf.remoting.protobuf.FieldType的类文件, 警告: 未知的枚举常量 com.baidu.bjf.remoting.protobuf.FieldType.UINT32, 警告: 未知的枚举常量 com.baidu.bjf.remoting.protobuf.FieldType.BYTES, ConfigConfig$$JProtoBufClass.java:24: 警告: Can't initialize javac processor due to (most likely) a class loader problem: java.lang.NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment [ERROR] public class ConfigConfig$$JProtoBufClass implements com.baidu.bjf.remoting.protobuf.Codec<com.baidu.gmclient.ConfigConfig>{ [ERROR] ^ [ERROR] at lombok.javac.apt.LombokProcessor.getJavacProcessingEnvironment(LombokProcessor.java:419) [ERROR] at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:90) [ERROR] at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:124) [ERROR] at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:177) [ERROR] at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:73) [ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.(JavacProcessingEnvironment.java:500) [ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597) [ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690) [ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91) [ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035) [ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) [ERROR] at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) [ERROR] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856) [ERROR] at com.sun.tools.javac.main.Main.compile(Main.java:523) [ERROR] at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129) [ERROR] at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138) [ERROR] at com.baidu.bjf.remoting.protobuf.utils.compiler.JdkCompiler.doCompile(JdkCompiler.java:202) [ERROR] at com.baidu.bjf.remoting.protobuf.utils.compiler.AbstractCompiler.compile(AbstractCompiler.java:46) [ERROR] at com.baidu.bjf.remoting.protobuf.ProtobufProxy.doCreate(ProtobufProxy.java:274) [ERROR] at com.baidu.bjf.remoting.protobuf.ProtobufProxy.create(ProtobufProxy.java:174) [ERROR] at com.baidu.bjf.remoting.protobuf.ProtobufProxy.create(ProtobufProxy.java:155) [ERROR] at com.baidu.jprotobuf.mojo.JprotobufPreCompileMain$1.onEntry(JprotobufPreCompileMain.java:135) [ERROR] at jodd.io.findfile.ClassFinder.scanEntry(ClassFinder.java:375) [ERROR] at jodd.io.findfile.ClassFinder.scanClassFile(ClassFinder.java:324) [ERROR] at jodd.io.findfile.ClassFinder.scanClassPath(ClassFinder.java:307) [ERROR] at jodd.io.findfile.ClassFinder.scanPath(ClassFinder.java:239) [ERROR] at jodd.io.findfile.ClassFinder.scanPaths(ClassFinder.java:178) [ERROR] at jodd.io.findfile.ClassScanner.scan(ClassScanner.java:35) [ERROR] at jodd.io.findfile.ClassScanner.scanDefaultClasspath(ClassScanner.java:28)

wzx996 avatar Jul 23 '21 10:07 wzx996

是第一次遇到吗? 执行时 加 mvn clean 试一下呢? 如果 还不行,试一下 升级版本 jprotobuf 2.4.9 plugin 2.2.6

配置:

    <dependency>
        <groupId>com.baidu</groupId>
        <artifactId>jprotobuf-precompile-plugin</artifactId>
        <version>2.2.6</version>
    </dependency>

    <dependency>
        <groupId>com.baidu</groupId>
        <artifactId>jprotobuf</artifactId>
        <version>2.4.9</version>
    </dependency>
org.springframework.boot spring-boot-maven-plugin 2.1.3.RELEASE com.baidu jprotobuf-precompile-plugin 2.2.6 true com.baidu.gmclient true true compile precompile

wzx996 avatar Jul 23 '21 10:07 wzx996

该情况有不少使用的同学反馈, 主要的原因是配置的本地maven仓库路径包含的空格导致,可以把空格去掉后再试

jhunters avatar Aug 02 '21 01:08 jhunters

idea的启动类选择classpathFile,就可以了

chongqiWang avatar Dec 13 '22 18:12 chongqiWang

解决了吗?

xphh avatar Nov 18 '23 15:11 xphh