使用bazel时如何在intellij中获得protobuf方法?

时间:2017-10-03 15:29:11

标签: bazel

我遇到一个问题,我有一个使用protobuf的工作java程序,并使用bazel构建,但intellij无法识别方法toByteArray。 我在我的本地机器上分叉https://github.com/cgrushko/proto_library,将工作区导入intellij并构建。然后我添加了以下java主类:

package src;

import demo.PersonOuterClass;

public class Main {
    public static void main(String argv[]) {
    byte[] ba = PersonOuterClass.Person.newBuilder().setEmail("dwwd").build().toByteArray();
    for (byte b : ba) {
      System.out.println(b);
    }
  }
}

以及以下bazel构建规则

java_binary(
    name = "Main",
    main_class = "src.Main",
    srcs = ["Main.java"],
    deps = [":person_java_proto"]
)

程序构建并正常运行,但在intellij中,toByteArray()为红色,而intellij表示无法解析该方法。

我怀疑问题是生成的Person扩展了com.google.protobuf.GeneratedMessageV3但是intellij不知道GeneratedMessageV3并且它扩展了一个定义toByteArray方法的类AbstractMessageLite。

任何人都知道如何修复bazel构建目标或intellij,以便ide解析toByteArray?

谢谢,

汤姆。

2 个答案:

答案 0 :(得分:0)

我通过将bazel- / external / java / com_google_protobuf_java / core / src / main / java标记为源根来解决了这个问题。 (右键单击 - >将目录标记为 - >源根目录)

答案 1 :(得分:0)

我通过添加 com.google.protobuf:protobuf-java 作为依赖于 protobuf 的 Bazel 库的依赖项,在我的 Bazel 项目中解决了这个问题。