当前位置:K88软件开发文章中心编程语言SQLscala → 文章内容

简单构建工具

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-19 4:45:31

var textOpt:Option[String] = None var idOpt:Option[Long] = None while(token != null) { if (token == FIELD_NAME) { parser.getCurrentName() match { case "text" => { parser.nextToken() textOpt = Some(parser.getText()) } case "id" => { parser.nextToken() idOpt = Some(parser.getLongValue()) } case _ => // noop } } token = parser.nextToken() } if (textOpt.isDefined && idOpt.isDefined) { Some(SimpleParsed(idOpt.get, textOpt.get)) } else { None } } else { None } }}这是一个简单的 Jackson 解析器。当我们保存,SBT 会重新编译代码和运行测试。代码变得越来越好了!info] SimpleParser should[info] + work with basic tweet[info] + reject a non-JSON tweet[info] x ignore nested content[info] '2' is not equal to '1' (SimpleParserSpec.scala:32)[info] + fail on partial content[info] == com.twitter.sample.SimpleParserSpec ==哦。我们需要检查嵌套对象。让我们在 token 读取循环处添加一些丑陋的守卫。 def parse(str: String) = { val parser = parserFactory.createJsonParser(str) var nested = 0 if (parser.nextToken() == START_OBJECT) { var token = parser.nextToken() var textOpt:Option[String] = None var idOpt:Option[Long] = None while(token != null) { if (token == FIELD_NAME && nested == 0) { parser.getCurrentName() match { case "text" => { parser.nextToken() textOpt = Some(parser.getText()) } case "id" => { parser.nextToken() idOpt = Some(parser.getLongValue()) } case _ => // noop } } else if (token == START_OBJECT) { nested += 1 } else if (token == END_OBJECT) { nested -= 1 } token = parser.nextToken() } if (textOpt.isDefined && idOpt.isDefined) { Some(SimpleParsed(idOpt.get, textOpt.get)) } else { None } } else { None } }…测试通过了!打包和发布现在我们已经可以运行 package 命令来生成一个 jar 文件。不过我们可能要与其他组分享我们的 jar 包。要做到这一点,我们将在 StandardProject 基础上构建,这给了我们一个良好的开端。第一步是引入 StandardProject 为 SBT 插件。插件是一种为你的构建引进依赖的方式,注意不是为你的项目引入。这些依赖关系定义在 project/plugins/Plugins.scala 文件中。添加以下代码到 Plugins.scala 文件中。import sbt._class Plugins(info: ProjectInfo) extends PluginDefinition(info) { val twitterMaven = "twitter.com" at "http://maven.twttr.com/" val defaultProject = "com.twitter" % "standard-project" % "0.7.14"}注意我们指定了一个 Maven 仓库和一个依赖。这是因为这个标准项目库是由 twitter 托管的,不在 SBT 默认检查的仓库中。我们也将更新项目定义来扩展 StandardProject,包括 SVN 发布特质,和我们希望发布的仓库定义。修改SampleProject.scalaimport sbt._import com.twitter.sbt._class SampleProject(info: ProjectInfo) extends StandardProject(info) with SubversionPublisher { val jackson = "org.codehaus.jackson" % "jackson-core-asl" % "1.6.1" val specs = "org.scala-tools.testing" % "specs_2.8.0" % "1.6.5" % "test" override def subversionRepository = Some("http://svn.local.twitter.com/maven/")}现在如果我们运行发布操作,将看到以下输出[info] == deliver ==IvySvn Build-Version: nullIvySvn Build-DateTime: null[info] :: delivering :: com.twitter#sample;1.0-SNAPSHOT :: 1.0-SNAPSHOT :: release :: Wed Nov 24 10:26:45 PST 2010[info] delivering ivy file to /Users/mmcbride/projects/sbt-sample/target/ivy-1.0-SNAPSHOT.xml[info] == deliver ==[info] [info] == make-pom ==[info] Wrote /Users/mmcbride/projects/sbt-sample/target/sample-1.0-SNAPSHOT.pom[info] == make-pom ==[info] [info] == publish ==[info] :: publishing :: com.twitter#sample[info] Scheduling publish to http://svn.local.twitter.com/maven/com/twitter/sample/1.0-SNAPSHOT/sample-1.0-SNAPSHOT.jar[info] published sample to com/twitter/sample/1.0-SNAPSHOT/sample-1.0-SNAPSHOT.jar[info] Scheduling publish to http://svn.local.twitter.com/maven/com/twitter/sample/1.0-SNAPSHOT/sample-1.0-SNAPSHOT.pom[info] published sample to com/twitter/sample/1.0-SNAPSHOT/sample-1.0-SNAPSHOT.pom[info] Scheduling publish to http://svn.local.twitter.com/maven/com/twitter/sample/1.0-SNAPSHOT/ivy-1.0-SNAPSHOT.xml[info] published ivy to com/twitter/sample/1.0-SNAPSHOT/ivy-1.0-SNAPSHOT.xml[info] Binary diff deleting com/twitter/sample/1.0-SNAPSHOT[info] Commit finished r977 by 'mmcbride' at Wed Nov 24 10:26:47 PST 2010[info] Copying from com/twitter/sample/.upload to com/twitter/sample/1.0-SNAPSHOT[info] Binary diff finished : r978 by 'mmcbride' at Wed Nov 24 10:26:47 PST 2010[info] == publish ==[success] Successful.[info] [info] Total time: 4 s, completed Nov 24, 2010 10:26:47 AM这样(一段时间后),就可以在 binaries.local.twitter.com 上看到我们发布的 jar 包。添加任务任务就是 Scala 函数。添加一个任务最简单的方法是,在你的项目定义中引入一个 val 定义的任务方法,如lazy val print = task {log.info

上一页  [1] [2] [3] [4]  下一页


简单构建工具