Java编译报错:无法访问QueryFeatureExtract类的技术咨询
解决Thrift客户端编译时无法访问生成类的问题
我来帮你搞定这个编译错误!你遇到的问题根源是sourcepath参数指定错误,导致编译器找不到正确的类结构。
错误原因分析
你把-sourcepath设成了gen-java/query_feature/,但实际上QueryFeatureExtract类的包是query_feature(从目录结构就能看出来),编译器需要从源文件根目录(也就是gen-java/)出发,按照包名对应的子目录(query_feature/)去查找源文件。当你把sourcepath指向gen-java/query_feature/时,编译器会认为这个目录是根,而类里的包声明是query_feature,就会去这个目录下再找query_feature子目录,自然找不到正确的文件,所以报错说“该文件不包含QueryFeatureExtract类”。
正确的编译命令
你需要把sourcepath改成gen-java/,同时要确保QueryFeatureExtract类已经被编译(或者和ThriftClient一起编译),推荐两种方式:
方式1:分步编译
# 先编译Thrift生成的QueryFeatureExtract类 javac -classpath libthrift-0.9.1.jar:slf4j.jar -sourcepath gen-java/ gen-java/query_feature/QueryFeatureExtract.java # 再编译ThriftClient(注意:.是把当前目录加入classpath,因为编译后的类文件会生成在当前目录的对应子目录下) javac -classpath libthrift-0.9.1.jar:slf4j.jar:. -sourcepath gen-java/ ThriftClient.java
方式2:一次性编译所有依赖文件
javac -classpath libthrift-0.9.1.jar:slf4j.jar -sourcepath gen-java/ gen-java/query_feature/QueryFeatureExtract.java ThriftClient.java
如果后续还有更多Thrift生成的类,也可以用通配符批量编译:
javac -classpath libthrift-0.9.1.jar:slf4j.jar -sourcepath gen-java/ gen-java/**/*.java ThriftClient.java
额外检查点
你可以打开gen-java/query_feature/QueryFeatureExtract.java确认开头的包声明是不是package query_feature;,这个是Thrift自动生成的,正常情况下不会有问题,但如果真的不对,那可能是你Thrift文件里的namespace配置错误,需要重新生成代码。
内容的提问来源于stack exchange,提问作者danche
相关产品推荐
相关产品推荐

