我有以下 scala grpc protobuf 專案build.sbt。
ThisBuild / version := "0.1.0-SNAPSHOT"
val openRtbCoreVersion = "1.5.5"
val googleCommonProtosVersion = "1.12.0"
val commonSettings: Seq[Def.Setting[_]] = Seq[Def.Setting[_]](
scalaVersion := "2.12.14",
organization := "com.td",
)
def scalaGrpcSettings: Seq[Def.Setting[_]] = Seq[Def.Setting[_]](
libraryDependencies = "com.thesamet.scalapb" %% "scalapb-runtime-grpc" % scalapb.compiler.Version.scalapbVersion,
libraryDependencies = "com.google.api.grpc" % "proto-google-common-protos" % googleCommonProtosVersion % "protobuf",
PB.targets in Compile := Seq(
PB.gens.java -> (sourceManaged in Compile).value,
scalapb.gen(javaConversions = true) -> (sourceManaged in Compile).value
),
PB.includePaths in Compile := Seq(
target.value / "protobuf_external",
),
PB.protoSources in Compile := Seq(
PB.externalIncludePath.value / "google" / "api",
target.value / "protobuf_external",
new File("definitions/common")
),
PB.additionalDependencies := Nil
)
lazy val root = (project in file("."))
.settings(
name := "proto-path-error"
).settings(scalaGrpcSettings)
project/plugins.sbt檔案是 -
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.20")
libraryDependencies = "com.thesamet.scalapb" %% "compilerplugin" % "0.10.0"
project/build.properties是 -
sbt.version = 1.3.13
src/main/protobuf/definitions/common/common.proto- _
syntax = "proto2";
option java_outer_classname = "CommonUtils";
package com.td.protobuf;
message CMap {
map<int32, Assets> cs = 1;
}
message Assets {
repeated int32 assets = 1;
}
整個專案在github上
這個專案運行良好。我想將sbt-protoc插件更新project/plugins.sbt到 1.0.0。
在我將 sbt-protoc 版本升級到 1.0.0 后,當我這樣做時出現以下錯誤sbt clean compile-
/home/rajkumar/Coding/scala/proto-path-error/definitions/common/common.proto: File does not reside within any path specified using --proto_path (or -I). You must specify a --proto_path which encompasses this file. Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think). [error] java.lang.RuntimeException: protoc returned exit code: 1 [error] at scala.sys.package$.error(package.scala:30) [error] at sbtprotoc.ProtocPlugin$.compile(ProtocPlugin.scala:438) [error] at sbtprotoc.ProtocPlugin$.compileProto$1(ProtocPlugin.scala:537) [error] at sbtprotoc.ProtocPlugin$.$anonfun$sourceGeneratorTask$12(ProtocPlugin.scala:544) [error] at sbt.util.FileFunction$.$anonfun$cached$1(FileFunction.scala:73) [error] at sbt.util.FileFunction$.$anonfun$cached$4(FileFunction.scala:146) [error] at sbt.util.Difference.apply(Tracked.scala:323) [error] at sbt.util.Difference.apply(Tracked.scala:303) [error] at sbt.util.FileFunction$.$anonfun$cached$3(FileFunction.scala:142) [error] at sbt.util.Difference.apply(Tracked.scala:323) [error] at sbt.util.Difference.apply(Tracked.scala:298) [error] at sbt.util.FileFunction$.$anonfun$cached$2(FileFunction.scala:141) [error] at sbtprotoc.ProtocPlugin$.$anonfun$sourceGeneratorTask$4(ProtocPlugin.scala:549) [error] at scala.Function1.$anonfun$compose$1(Function1.scala:49) [error] at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62) [error] at sbt.std.Transform$$anon$4.work(Transform.scala:67) [error] at sbt.Execute.$anonfun$submit$2(Execute.scala:281) [error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19) [error] at sbt.Execute.work(Execute.scala:290) [error] at sbt.Execute.$anonfun$submit$1(Execute.scala:281) [error] at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178) [error] at sbt.CompletionService$$anon$2.call(CompletionService.scala:37) [error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [error] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [error] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [error] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [error] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [error] at java.base/java.lang.Thread.run(Thread.java:829) [error] (Compile / protocGenerate) protoc returned exit code: 1 [error] Total time: 2 s, completed Sep 9, 2022, 7:15:30 PM
我在插件升級中錯過了什么。知道如何解決錯誤嗎?
uj5u.com熱心網友回復:
在 build.sbt 中有多個需要修復的東西來更新 sbt-protoc 1.0.x。也許它依賴于已修復的舊行為。讓我們首先從 protoc 報告的錯誤開始:
File does not reside within any path specified using --proto_path (or -I).
You must specify a --proto_path which encompasses this file. Note that the
proto_path must be an exact prefix of the .proto file names -- protoc is too
dumb to figure out when two paths (e.g. absolute and relative) are
equivalent (it's harder than you think).
換句話說,我們為其生成源的每個檔案都需要在“proto_path”下。ScalaPB 會自動為您設定 proto_path,除非您以某種方式通過手動重置它來規避它,:=如下所示:
PB.includePaths in Compile := Seq(
target.value / "protobuf_external",
),
而且由于protobuf_external默認情況下(也在舊版本中)在 proto_path 中,因此這些行是不必要的,應該洗掉。
看來您想解壓縮proto-google-common-protos. 有一個快捷方式:使用protobuf-src而不是protobuf作為范圍:
libraryDependencies = "com.google.api.grpc" % "proto-google-common-protos" % googleCommonProtosVersion % "protobuf-src",
總之,您的配置應該是:
def scalaGrpcSettings: Seq[Def.Setting[_]] = Seq[Def.Setting[_]](
libraryDependencies = "com.thesamet.scalapb" %% "scalapb-runtime-grpc" % scalapb.compiler.Version.scalapbVersion,
libraryDependencies = "com.google.api.grpc" % "proto-google-common-protos" % googleCommonProtosVersion % "protobuf-src",
PB.targets in Compile := Seq(
PB.gens.java -> (sourceManaged in Compile).value,
scalapb.gen(javaConversions = true) -> (sourceManaged in Compile).value
),
PB.protoSources in Compile = Seq(
new File("definitions/common")
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508563.html
下一篇:Scala函式鏈接和處理失敗
