Scrooge有sbt和maven的插件。我对maven插件并不感兴趣。
似乎sbt插件能够从依赖项工件中提取thrift文件。请参阅scroogeThriftDependencies选项here
但是我对这是如何工作感到非常困惑,因为我已经将sbt-plugin添加到只有thrift文件的repo中。我希望插件能够以某种方式发布一个包含从生成的代码和thrift源本身编译的类的工件,以便依赖于它并定义它自己的thrift的库可以访问thrift以编译它自己的thrift。 / p>
我调查了我的构建产生的工件,发现绝对没有任何thrift文件的痕迹。
任何人都知道这可能如何运作? maven插件是否发布了thrift源,但这个功能只是添加到消费方面的sbt?我误解了别的什么吗?
答案 0 :(得分:2)
Scrooge SBT plugin不涉及工件发布。你可以自己照顾好这个。在包含要发布的Thrift IDL文件的项目中,将其添加到build.sbt
:
organization := "me"
name := "thrift-inherit-shared"
version := "0.1-SNAPSHOT"
scalaVersion := "2.10.4"
com.twitter.scrooge.ScroogeSBT.newSettings
lazy val thriftDirectory = settingKey[File]("The folder containing the thrift IDL files.")
thriftDirectory := {
baseDirectory.value / "src" / "main" / "thrift"
}
lazy val thriftIDLFiles = settingKey[Seq[File]]("The thrift IDL files.")
thriftIDLFiles := {
(thriftDirectory.value ** "*.thrift").get
}
// this makes sure the jar file will only contain the .thrift files and no generated classes
mappings in (Compile, packageBin) := {
thriftIDLFiles.value map { thriftFile => (thriftFile, thriftFile.name)}
}
libraryDependencies ++= Seq(
"org.apache.thrift" % "libthrift" % "0.9.1",
"com.twitter" %% "scrooge-core" % "3.16.3"
)
通过sbt publish
或sbt publishLocal
将工件发布到回购。然后在另一个项目中,build.sbt
可能如下所示:
organization := "me"
name := "thrift-inherit-server"
version := "0.1-SNAPSHOT"
scalaVersion := "2.10.4"
com.twitter.scrooge.ScroogeSBT.newSettings
scroogeThriftDependencies in Compile := Seq("thrift-inherit-shared_2.10")
libraryDependencies ++= Seq(
"me" %% "thrift-inherit-shared" % "0.1-SNAPSHOT",
"org.apache.thrift" % "libthrift" % "0.9.1",
"com.twitter" %% "scrooge-core" % "3.16.3"
)
执行scroogeGen
任务时将包含依赖的Thrift IDL。所以你可能有一个像这样的.thrift文件,它都可以工作:
include "shared.thrift" <--- dependent IDL file
namespace java me.server.generated.thrift
struct UserEnvironment {
1: shared.Environment env <--- defined in dependent IDL file
2: i64 userId
}
答案 1 :(得分:0)
所以这个功能从未在Scrooge的sbt-plugin中实现,即使它是为maven插件实现的。
我发布了PR解决此问题:https://github.com/twitter/scrooge/pull/153