如何发布一个"节俭回购"使用Scrooge和相关插件?

时间:2014-09-24 21:11:05

标签: scala sbt sbt-plugin scrooge

Scrooge有sbt和maven的插件。我对maven插件并不感兴趣。

似乎sbt插件能够从依赖项工件中提取thrift文件。请参阅scroogeThriftDependencies选项here

但是我对这是如何工作感到非常困惑,因为我已经将sbt-plugin添加到只有thrift文件的repo中。我希望插件能够以某种方式发布一个包含从生成的代码和thrift源本身编译的类的工件,以便依赖于它并定义它自己的thrift的库可以访问thrift以编译它自己的thrift。 / p>

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

任何人都知道这可能如何运作? maven插件是否发布了thrift源,但这个功能只是添加到消费方面的sbt?我误解了别的什么吗?

2 个答案:

答案 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 publishsbt 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