You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打包Java gRPC服务为JAR时遭遇UNIMPLEMENTED: Method not found错误

gRPC服务打包JAR后方法调用触发UNIMPLEMENTED异常

IDEA中启动服务端后,调用login()或ParseScores()方法完全正常,但将服务打包成JAR文件后,调用这些方法会收到io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method not found: wusthelper.campus.graduate.v1.GraduateRequestAgent/Login异常,该问题仅在JAR打包后出现。

使用grpcurl、evans等gRPC调试工具时,无论服务是JAR运行还是IDEA直接运行都能正常调用,但客户端调用却失败。客户端使用的生成proto代码与服务端一致,且服务端日志显示已成功加载实现类。

相关代码片段

Proto文件

// proto/campus/graduate/v1/graduate.proto
syntax = 'proto3';

package wusthelper.campus.graduate.v1;

option java_package = 'cn.wustlinghang.wusthelper.rpc.graduate.v1';
option java_outer_classname = 'GraduateProto';
option java_generic_services = true;

service GraduateRequestAgent {
  // Login Login service for graduate
  rpc Login (UsernamePasswordReq) returns (AgentReply);
  // GetStudentInfo Get the student info
  rpc GetStudentInfo (CookieReq) returns (AgentReply);
  //... more
}

service GraduateParser {
  // ParseScores Parse the score page
  rpc ParseScores (PlainText) returns (ScoreParseReply);
  //... more
}

服务端实现类

GraduateRequestAgentImpl.java

package cn.wustlinghang.wusthelper.campus.graduate.service;
import net.devh.boot.grpc.server.service.GrpcService;

@GrpcService
public class GraduateRequestAgentImpl extends GraduateRequestAgentGrpc.GraduateRequestAgentImplBase {

    @Override
    public void login(CampusCommonProto.UsernamePasswordReq request,
                      StreamObserver<CampusCommonProto.AgentReply> responseObserver) {
        //...implements
    }

    //... other implements
}

GraduateParserImpl.java

package cn.wustlinghang.wusthelper.campus.graduate.service;

import net.devh.boot.grpc.server.service.GrpcService;

@GrpcService
public class GraduateParserImpl extends GraduateParserGrpc.GraduateParserImplBase {

    @Override
    public void parseScores(CommonProto.PlainText request,
                            StreamObserver<GraduateProto.ScoreParseReply> responseObserver) {
        // ...implements
    }
}

服务端日志

2023-04-06T20:23:37.358+08:00  INFO 27868 --- [           main] g.s.a.GrpcServerFactoryAutoConfiguration : Detected grpc-netty-shaded: Creating ShadedNettyGrpcServerFactory
2023-04-06T20:23:37.507+08:00  INFO 27868 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: wusthelper.campus.graduate.v1.GraduateParser, bean: graduateParserImpl, class: cn.wustlinghang.wusthelper.campus.graduate.service.GraduateParserImpl
2023-04-06T20:23:37.507+08:00  INFO 27868 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: wusthelper.campus.graduate.v1.GraduateRequestAgent, bean: graduateRequestAgentImpl, class: cn.wustlinghang.wusthelper.campus.graduate.service.GraduateRequestAgentImpl
2023-04-06T20:23:37.507+08:00  INFO 27868 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: grpc.health.v1.Health, bean: grpcHealthService, class: io.grpc.protobuf.services.HealthServiceImpl
2023-04-06T20:23:37.507+08:00  INFO 27868 --- [           main] n.d.b.g.s.s.AbstractGrpcServerFactory    : Registered gRPC service: grpc.reflection.v1alpha.ServerReflection, bean: protoReflectionService, class: io.grpc.protobuf.services.ProtoReflectionService
2023-04-06T20:23:37.632+08:00  INFO 27868 --- [           main] n.d.b.g.s.s.GrpcServerLifecycle          : gRPC Server started, listening on address: 0.0.0.0, port: 19090
2023-04-06T20:23:37.640+08:00  INFO 27868 --- [           main] c.w.w.c.graduate.GraduateServiceMain     : Started GraduateServiceMain in 1.024 seconds (process running for 1.417)

环境信息

  • Java 17
  • SpringBoot 3.0.4
  • grpc-java 1.54.0
  • grpc-spring-boot-starter(net.devh) 2.14.0.RELEASE

已尝试的操作

  • 移除SpringBoot和grpc-starter,改用纯gRPC服务,问题仍未解决。

内容的提问来源于stack exchange,提问作者lenfrex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:24:54