netty冲突 play sbt_ScalaPB(4): 通用跨系统protobuf数据,sbt设置

我们知道,在集群环境节点之间进行交换的数据必须经过序列化/反序列化处理过程,而在这方面protobuf是一个比较高效、易用的模式。用户首先在.proto文件中用IDL来定义系统中各种需要进行交换的数据类型。然后用protoc编译器自动产生相关的源代码,里面包括了完整的序列化处理函数。在一个集成的系统环境内,protobuf数据必须保持与所有系统的松散耦合,不能对这些用户系统有任何依赖。这样把protobuf数据类型和相关的序列化/反序列化函数打成一个独立的包,由用户系统各自引用就是一种最佳解决方案了。

下面示范产生一个独立的protobuf包。build.sbt定义如下:

import scalapb.compiler.Version.scalapbVersion

import scalapb.compiler.Version.grpcJavaVersion

name := "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.targetsin Compile :=Seq(

scalapb.gen(

flatPackage= true)-> (sourceDirectory in Compile).value / "scala/generated")

注意我们指定把产生的源代码放在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 产生common-protobuf-data_???.jar文件。在使用方sbt项目里可以用unmanagedBase指定.jar路径或者把包放到默认的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.targetsin Compile :=Seq(

scalapb.gen()-> (sourceManaged inCompile).value

)

好了。在上面的.sbt文件中有关路径的设置需要总结一下:

1、改变默认源代码路径:   (src/main/scala, src/test/scala)

scalaSource in Compile := baseDirectory.value / "src"scalaSourcein Test := baseDirectory.value / "test-src"javaSourcein Compile := baseDirectory.value / "src"javaSourcein Test := baseDirectory.value / "test-src"

2、改变默认资源路径:(src/main/resources)

resourceDirectory in Compile := baseDirectory.value / "resources"resourceDirectoryin Test := baseDirectory.value / "test-resources"

3、改变默认附加库路径:(lib/)

unmanagedBase := baseDirectory.value / "jars"

//只在编译时引用

unmanagedBase in Compile := baseDirectory.value / "lib" / "main"

4、取消根目录为源代码默认路径:

sourcesInBase := false

5、增加一个源代码路径:

unmanagedSourceDirectories in Compile += baseDirectory.value / "extra-src"

6、增加一个资源路径:

unmanagedResourceDirectories in Compile += baseDirectory.value / "extra-resources"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值