Я пытаюсь использовать скомпилированные прототипы в моем коде kotlin. Проектом управляет Базель. Поэтому я воспроизвожу проблему с простым проектом «HelloWorld».
WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
RULES_KOTLIN_VERSION = "9051eb053f9c958440603d557316a6e9fda14687"
http_archive(
name = "io_bazel_rules_kotlin",
sha256 = "c36e71eec84c0e17dd098143a9d93d5720e81b4db32bceaf2daf939252352727",
strip_prefix = "rules_kotlin-%s" % RULES_KOTLIN_VERSION,
url = "https://github.com/bazelbuild/rules_kotlin/archive/%s.tar.gz" % RULES_KOTLIN_VERSION,
)
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories", "kt_register_toolchains")
kotlin_repositories()
kt_register_toolchains()
http_archive(
name = "com_google_protobuf",
strip_prefix = "protobuf-master",
urls = ["https://github.com/protocolbuffers/protobuf/archive/master.zip"],
)
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
BUILD
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_library")
load("@rules_java//java:defs.bzl", "java_binary", "java_lite_proto_library", "java_proto_library")
load("@rules_proto//proto:defs.bzl", "proto_library")
package(default_visibility = ["//visibility:public"])
proto_library(
name = "clicklocation_proto",
srcs = ["ClickLocation.proto"],
)
java_proto_library(
name = "clicklocation_java_lite_proto",
deps = [":clicklocation_proto"],
)
kt_jvm_library(
name = "app_lib",
srcs = ["Main.kt"],
deps = [":clicklocation_java_lite_proto"]
)
java_binary(
name = "myapp",
main_class = "MyApp",
runtime_deps = [":app_lib"],
)
Proto file
syntax = "proto2";
package objectrecognition;
option java_package = "com.kshmax.objectrecognition.proto";
option java_outer_classname = "ClickLocationProtos";
message ClickLocation {
required float x = 1;
required float y = 2;
}
Main. kt
import com.kshmax.objectrecognition.proto.ClickLocationProtos
class MyApp {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val location = ClickLocationProtos.ClickLocation.newBuilder()
location.x = 0.1f
location.y = 0.2f
location.build()
}
}
}
Я сделал это, как описано в примерах репозитория protocolbuffers / protobuf. Но я получил ошибку:
ошибка: не могут быть разрешены супертипы следующих классов. Убедитесь, что у вас есть требуемые зависимости в classpath: класс com.kshmax.objectrecognition.proto.ClickLocationProtos.ClickLocation, неразрешенные супертипы: com.google.protobuf.GeneratedMessageV3, класс com.kshmax.objectrecognition.proto.ClickLocationProtosOrced.lick : com.google.protobuf.MessageOrBuilder class com.kshmax.objectrecognition.proto.ClickLocationProtos.ClickLocation.Builder, неразрешенные супертипы: com.google.protobuf.GeneratedMessageV3.Builder
Что я делаю