1

Scrooge 有 sbt 和 maven 的插件。我对 Maven 插件不是很感兴趣。

看起来 sbt 插件能够从依赖项中提取 thrift 文件。在此处查看 scroogeThriftDependencies 选项

但是,我对它的工作原理感到非常困惑,因为我已将 sbt-plugin 添加到仅包含 thrift 文件的存储库中。我有点期望插件以某种方式发布一个工件,其中包含从生成的代码编译的类和节俭源本身,以便依赖它并定义它自己的节俭的库可以访问节俭以编译它自己的节俭。

我调查了我的构建产生的工件,发现绝对没有任何旧文件的痕迹。

任何人都知道这可能如何工作?maven 插件是否发布了节俭的资源,但这个功能只添加到消费端的 sbt 中?我误解了别的东西吗?

4

2 回答 2

2

Scrooge SBT 插件不参与工件发布。你可以自己处理这个。在包含要发布的 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
}
于 2014-10-03T09:29:51.757 回答
0

所以这个特性从未在 Scrooge 的 sbt-plugin 中实现,即使它是为 maven 插件实现的。

我发布了一个 PR 来解决这个问题:https ://github.com/twitter/scooge/pull/153

于 2014-10-03T17:01:57.193 回答