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

简单构建工具

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

由 Shaodengdeng 创建, 最后一次修改 2016-08-12 简单构建工具关于 SBTSBT 是一个现代化的构建工具。虽然它由 Scala 编写并提供了很多 Scala 便利,但它是一个通用的构建工具。为什么选择 SBT?明智的依赖管理使用 Ivy 做依赖管理“只在请求时更新”的模型对创建任务全面的 Scala 语言支持连续执行命令在项目上下文内启动解释器入门译注:最新的 SBT 安装方式请参考 scala-sbt 的文档下载 jar 包地址创建一个调用这个 jar 的 SBT shell 脚本,例如java -Xmx512M -jar sbt-launch.jar "$@"确保它是可执行的,并在你的 path 下运行 sbt 来创建项目[local ~/projects]$ sbtProject does not exist, create new project? (y/N/s) yName: sampleOrganization: com.twitterVersion [1.0]: 1.0-SNAPSHOTScala version [2.7.7]: 2.8.1sbt version [0.7.4]: Getting Scala 2.7.7 ...:: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 2 artifacts copied, 0 already retrieved (9911kB/221ms)Getting org.scala-tools.sbt sbt_2.7.7 0.7.4 ...:: retrieving :: org.scala-tools.sbt#boot-app confs: [default] 15 artifacts copied, 0 already retrieved (4096kB/167ms)[success] Successfully initialized directory structure.Getting Scala 2.8.1 ...:: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 2 artifacts copied, 0 already retrieved (15118kB/386ms)[info] Building project sample 1.0-SNAPSHOT against Scala 2.8.1[info] using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7可以看到它已经以较好的形式创建了项目的快照版本。项目布局项目 – 项目定义文件project/build/.scala – 主项目定义文件project/build.properties – 项目、sbt 和 Scala 版本定义src/main – 你的应用程序代码出现在这里,在子目录表明代码的语言(如src/main/scala, src/main/java)src/main/resources – 你想要添加到 jar 包中的静态文件(如日志配置)src/test – 就像 src/main,不过是对测试lib_managed – 你的项目依赖的 jar文件。由 sbt update 时填充target – 生成物的目标路径(如自动生成的 thrift 代码,类文件,jar包)添加一些代码我们将为简单的 tweet 消息创建一个简单的 JSON 解析器。将以下代码加在这个文件中src/main/scala/com/twitter/sample/SimpleParser.scalapackage com.twitter.samplecase class SimpleParsed(id: Long, text: String)class SimpleParser { val tweetRegex = "\"id\":(.*),\"text\":\"(.*)\"".r def parse(str: String) = { tweetRegex.findFirstMatchIn(str) match { case Some(m) => { val id = str.substring(m.start(1), m.end(1)).toInt val text = str.substring(m.start(2), m.end(2)) Some(SimpleParsed(id, text)) } case _ => None } }}这段代码丑陋并有 bug,但应该能够编译通过。在控制台中的测试SBT 既可以用作命令行脚本,也可以作为构建控制台。我们将主要利用它作为构建控制台,不过大多数命令可以作为参数传递给 SBT 独立运行,如sbt test需要注意如果一个命令需要参数,你需要使用引号包括住整个参数路径,例如sbt 'test-only com.twitter.sample.SampleSpec'这种方式很奇怪。不管怎样,要开始我们的代码工作了,启动SBT吧[local ~/projects/sbt-sample]$ sbt[info] Building project sample 1.0-SNAPSHOT against Scala 2.8.1[info] using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7> SBT 允许你启动一个 Scala REPL 并加载所有项目依赖。它会在启动控制台前编译项目的源代码,从而为我们提供一个快速测试解析器的工作台。> console[info] [info] == compile ==[info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.[info] Compiling main sources...[info] Nothing to compile.[info] Post-analysis: 3 classes.[info] == compile ==[info] [info] == copy-test-resources ==[info] == copy-test-resources ==[info] [info] == test-compile ==[info] Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.[info] Compiling test sources...[info] Nothing to compile.[info] Post-analysis: 0 classes.[info] == test-compile ==[info] [info] == copy-resources ==[info] == copy-resources ==[info] [info] == console ==[info] Starting scala interpreter...[info] Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22).Type in expressions to have them evaluated.Type :help for more information.scala> 我们代码编译通过了,并提供了典型的 Scala 提示符。我们将创建一个新的解析器,一个 tweet 以确保其“能工作”scala> import com.twitter.sample._ import com.twitter.sample._scala> val tweet = """{"id":1,"text":"foo"}"""tweet: java.lang.String = {"id":1,"text":"foo"}scala> val parser = new SimpleParser parser: com.twitter.sample.SimpleParser = com.twitter.sample.SimpleParser@71060c3escala> parser.parse(tweet) res0: Option[com.twitter.sample.SimpleParsed] = Some(SimpleParsed(1,"foo"}))scala> 添加依赖我们简单的解析器对这个非常小的输入集工作正常,但我们需要添加更多的测试并让它出错。第一步是在我们的项目中添加 specs 测试库和一个真正的 JSON 解析器。要做到这一点,我们必须超越默认的 SBT 项目布局来创建一个项目。SBT 认为 project/build 目录中的 Scala 文件是项目定义。添加以下内容到这个文件中project/build/SampleProject.scalaimport sbt._class SampleProject(info: ProjectInfo) extends DefaultProject(info) { 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"}一个项目定义

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


简单构建工具