ScalaPB(4): 通用跨系统protobuf数据,sbt设置
? 我們知道,在集群環(huán)境節(jié)點(diǎn)之間進(jìn)行交換的數(shù)據(jù)必須經(jīng)過序列化/反序列化處理過程,而在這方面protobuf是一個比較高效、易用的模式。用戶首先在.proto文件中用IDL來定義系統(tǒng)中各種需要進(jìn)行交換的數(shù)據(jù)類型。然后用protoc編譯器自動產(chǎn)生相關(guān)的源代碼,里面包括了完整的序列化處理函數(shù)。在一個集成的系統(tǒng)環(huán)境內(nèi),protobuf數(shù)據(jù)必須保持與所有系統(tǒng)的松散耦合,不能對這些用戶系統(tǒng)有任何依賴。這樣把protobuf數(shù)據(jù)類型和相關(guān)的序列化/反序列化函數(shù)打成一個獨(dú)立的包,由用戶系統(tǒng)各自引用就是一種最佳解決方案了。
下面示范產(chǎn)生一個獨(dú)立的protobuf包。build.sbt定義如下:
import scalapb.compiler.Version.scalapbVersion import scalapb.compiler.Version.grpcJavaVersionname := "common-protobuf-data"version := "0.1"scalaVersion := "2.12.6"libraryDependencies ++= Seq("com.thesamet.scalapb" %% "scalapb-runtime" % scalapbVersion % "protobuf","io.grpc" % "grpc-netty" % grpcJavaVersion,"com.thesamet.scalapb" %% "scalapb-runtime-grpc" % scalapbVersion )PB.targets in Compile := Seq(scalapb.gen(flatPackage = true) -> (sourceDirectory in Compile).value / "scala/generated")注意我們指定把產(chǎn)生的源代碼放在src/main/scala/generated/目錄下。
我們再隨便建個.proto文件:
syntax = "proto3";// Brought in from scalapb-runtime import "scalapb/scalapb.proto"; import "google/protobuf/wrappers.proto";package proto.microservices;message Added {int32 nbr1 = 1;int32 nbr2 = 2; }message Subtracted {int32 nbr1 = 1;int32 nbr2 = 2; }message AddedResult {int32 nbr1 = 1;int32 nbr2 = 2;int32 result = 3; }message SubtractedResult {int32 nbr1 = 1;int32 nbr2 = 2;int32 result = 3; }用sbt package 產(chǎn)生common-protobuf-data_???.jar文件。在使用方sbt項目里可以用unmanagedBase指定.jar路徑或者把包放到默認(rèn)的lib/目錄下:
lazy val commonSettings = Seq(name := "using-common-protobuf-data",version := "1.0",scalaVersion := "2.12.6", )lazy val local = (project in file(".")).settings(commonSettings).settings(libraryDependencies ++= Seq("com.typesafe.akka" %% "akka-remote" % "2.5.11","com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf"),)unmanagedBase := file("/users/tiger-macpro/jars/")PB.targets in Compile := Seq(scalapb.gen() -> (sourceManaged in Compile).value )好了。在上面的.sbt文件中有關(guān)路徑的設(shè)置需要總結(jié)一下:
1、改變默認(rèn)源代碼路徑: ? (src/main/scala, src/test/scala)
scalaSource in Compile := baseDirectory.value / "src" scalaSource in Test := baseDirectory.value / "test-src"javaSource in Compile := baseDirectory.value / "src" javaSource in Test := baseDirectory.value / "test-src"2、改變默認(rèn)資源路徑:(src/main/resources)
resourceDirectory in Compile := baseDirectory.value / "resources" resourceDirectory in Test := baseDirectory.value / "test-resources"3、改變默認(rèn)附加庫路徑:(lib/)
unmanagedBase := baseDirectory.value / "jars" //只在編譯時引用 unmanagedBase in Compile := baseDirectory.value / "lib" / "main"4、取消根目錄為源代碼默認(rèn)路徑:
sourcesInBase := false5、增加一個源代碼路徑:
unmanagedSourceDirectories in Compile += baseDirectory.value / "extra-src"6、增加一個資源路徑:
unmanagedResourceDirectories in Compile += baseDirectory.value / "extra-resources"?
轉(zhuǎn)載于:https://www.cnblogs.com/tiger-xc/p/9031143.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的ScalaPB(4): 通用跨系统protobuf数据,sbt设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shop--10.店铺列表(前端)
- 下一篇: 2016012086+杨岚青+散列函数应