以前一直是用maven去管理java项目,现在开始写scala项目了
但是在scala-ide中去编译scala项目和sbt的区别一直没弄清楚
受到文章:
http://my.oschina.net/yjwxh/blog/601566
的启发,查了相关的资料

sbt官网是http://www.scala-sbt.org/
官网的文档对中文特别友好,有中文版本的,但是看了一遍感觉很难接受这么复杂的配置方法
sbt是一种构建工具,在eclipse-ide中并没有集成
下载安装msi之后,在默认路径出现了/bin和/conf两个文件夹,添加到path中
在cmd中运行sbt之后会下载很多的jar包,这点非常不友好,第一次我以为出错了
第二次,运行了一夜,终于好了。

第一个小例子:
新建一个hello文件夹
新建一个hw.scala文件
object Hi {
def main(args: Array[String]) = println("Hi!")
}
进入特定的路径
运行sbt 会在hello文件夹下生成target文件夹
运行run
可以得到最简单的helloworld程度的执行

第一次修改第一个例子:
hello文件夹中添加一个文件build.sbt
lazy val root = (project in file(".")).
settings(
name:="hello",
version:="1.0",
scalaVersion:="2.11.8"
)
基本的构建设置都是放在根目录下的这个配置文件里面的
至少要有的是name 和 version属性
当然可以指定sbt的版本,在/hello/project/build.properties中输入
sbt.version=0.13.11
强制指定使用的sbt的版本,虽然各个sbt的版本兼容,但是官方还是建议指定

sbt使用的项目的目录是和maven相似的
构建出来的:编译的classes,打包的jars,托管文件,chches和文档都默认存在在target目录中
下面是进入sbt之后可以执行的选项
clean 删除targt目录下的文件
compile 编译源文件
test 编译运行所有的测试
console 进入一个包含classpath的解析器,quit或者ctrl+z退出
run <参数> 在和sbt所处的同一个虚拟机上执行项目的main class
package 将resources中文件和scala,java中的class文件打成jar包
help <命令> 显示帮助
reload 重新构建

sbt clean compile "testOnly TestA TestB"
首先执行清理,然后执行编译,最后是针对的testOnly和它的两个参数
一个比较高大上的命令就是
~compile
可以在更改源文件的同时自动的运行编译,就是一边改代码,结果就出来了(两个显示器的时候)

构建定义的三种风格:
多工程.sbt构建定义
bare.sbt构建定义
.scala构建定义

每个工程都有一些不可变的映射表来描述工程
map-key
第二个例子:
lazy val commonSettings = Seq(
organization := "com.example",
version := "0.1.0",
scalaVersion := "2.11.7"
)

lazy val root = (project in file(".")).
settings(commonSettings: _*).
settings(
name := "hello"
)
左边的name,version,scalaVersion,都是keys
一个key是一个SettingKey[T],或者TaskKey[T],或者InputKey[T]的实例
可以按照java语法设置这些key
lazy val root = (project in file(".")).
settings(
name :=("hello")
)
SettingKey[T]:一个key对应着只计算一次的value,加载项目的时候计算,然后一直保存着
TaskKey[T]:一个key对应着task的value,每次都会重新计算,可能存在潜在的副作用
InputKey[T]:一个key对应一个可以接收命令行参数的task

内置的keys:
内置的keys实际上是对象Keys的字段
build.sbt会隐式包含import sbt.keys._
所以可以通过name取到sbt.keys.name
自定义的keys:
通过上面的三种方法可以创建自定义的keys
例如:lazy val hello = taskKey[unit]("一个task示例")
给一个新的task也就是hello定义一个key
也就是说除了.sbt之外,cals和defs也可以对工程进行设置,与配置的位置是无关的
这里的lazy val而不是val可以避免初始化顺序的问题

添加第三方依赖库有两种方式:
将jar文件放入lib/中
在build.sbt中添加依赖
例子:
val derby = "org.apache.derby" % "derby" % "10.4.1.3"

lazy val commonSettings = Seq(
organization := "com.example",
version := "0.1.0",
scalaVersion := "2.11.7"
)

lazy val root = (project in file(".")).
settings(commonSettings: _*).
settings(
name := "hello",
libraryDependencies += derby
)
其中的+=好理解
%方法是用来从字符串构造Ivy模块ID的
下面的文档描述的就有点复杂了不看了

https://github.com/typesafehub/sbteclipse
针对比0.13版本高的sbt可以创建eclipse使用的工程文件目录
将这个插件用到sbt中有两种方法:
在~/.sbt/0.13/plugins/plugins.sbt中配置
在项目目录下去配置:project_dir/project/plugins.sbt
对最新版的配置的语法是:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
然后在命令行使用eclipse命令就可以生成一个目录结构,可以作为eclipse工程导入
例如:新建如下的目录结构
PS D:\javaweb_workspace\SCALA\sbt_eclipse_test> tree /f .
D:\JAVAWEB_WORKSPACE\SCALA\SBT_ECLIPSE_TEST
│ build.sbt

└─project
plugins.sbt
PS D:\javaweb_workspace\SCALA\sbt_eclipse_test> sbt
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[info] Loading global plugins from C:\Users\kongchung\.sbt\0.13\plugins
[info] Loading project definition from D:\javaweb_workspace\SCALA\sbt_eclipse_test\project
[info] Updating {file:/D:/javaweb_workspace/SCALA/sbt_eclipse_test/project/}sbt_eclipse_test-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to sbt_eclipse_test (in build file:/D:/javaweb_workspace/SCALA/sbt_eclipse_test/)
> eclipse
[info] About to create Eclipse project files for your project(s).
[info] Updating {file:/D:/javaweb_workspace/SCALA/sbt_eclipse_test/}sbt_eclipse_test...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Successfully created Eclipse project files for project(s):
[info] sbt_eclipse_test
> exit
PS D:\javaweb_workspace\SCALA\sbt_eclipse_test> tree /f .
D:\JAVAWEB_WORKSPACE\SCALA\SBT_ECLIPSE_TEST
│ .classpath
│ .project
│ build.sbt

├─.settings
│ org.eclipse.core.resources.prefs
│ org.scala-ide.sdt.core.prefs

├─project
│ │ plugins.sbt
│ │
│ ├─project
│ │ └─target
│ │ └─config-classes
│ │ $0b5cfab2a23c8f87aa49$.class
│ │ $0b5cfab2a23c8f87aa49.cache
│ │ $0b5cfab2a23c8f87aa49.class
│ │
│ └─target
│ ├─config-classes
│ ├─resolution-cache
│ │ ├─default
│ │ │ └─sbt_eclipse_test-build
│ │ │ └─scala_2.10
这个例子的参考文献:
http://www.tuicool.com/articles/f26Bjq
我得到的这个目录还缺少一些文件目录
这些设置都可以在build.sbt中具体的配置

Sbt的使用初步和用sbt插件生成eclipse工程的更多相关文章

  1. 由cobertura插件生成测试覆盖率报告

    由于cobertura已经集成到maven中,所以可以很方便的直接调用此插件生成报告: 直接运行命令:mvn cobertura:cobertura 就可以直接生成测试报告了. 下面是截图:

  2. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

    chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...

  3. rpc框架: thrift/avro/protobuf 之maven插件生成java类

    thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...

  4. Java+Velocity模板引擎集成插件到Eclipse及使用例子

    一.因为我用的是当前最新的Eclipse4.5,Eclipse中安装集成VelocityEclipse插件之前需要先安装其支持插件:Eclipse 2.0 Style Plugin Support 1 ...

  5. Hibernate(一):安装hibernate插件到eclipse环境

    离线安装hibernate插件到eclipse 为什么需要安装hibernate插件到eclipse?在开发eclipse时,很多配置文件信息如果有了hibernate插件集成进来就会有自能提示,方便 ...

  6. 购物商城学习--第三讲(tomcat插件启动web工程)

    此处提到的tomcat插件即maven工程集成的tomcat插件,可以在添加maven的tomcat插件之后,在本地通过脚本或者命令行方式运行web工程,tomcat插件启动只需要修改一个端口即可,非 ...

  7. 使用EGit插件将Eclipse现有项目分享到git@osc

    . . . . . 程序员一定要养成使用版本管理工具的好习惯,即使是自己一个人开发的项目也要加入到版本管理工具中.使用版本管理工具主要有两个好处:一个是更好的管理多个副本,这个优势不用说了:另一个就是 ...

  8. Jboot使用appassembler-maven-plugin插件生成启动脚本

    appassembler-maven-plugin介绍: 使用appassembler-maven-plugin插件可自动生成跨平台的启动脚本,可省去手工写脚本的麻烦,而且还可以生成jsw的后台运行程 ...

  9. hadoop eclipse插件生成

    hadoop eclipse插件生成 做了一年的hadoop开发.还没有自动生成过eclipse插件,一直都是在网上下载别人的用,今天有时间,就把这段遗憾补回来,自己生成一下,废话不说,開始了. 本文 ...

随机推荐

  1. json_decode和json_encode

    JSON出错:Cannot use object of type stdClass as array解决方法php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据, ...

  2. TI CC2541的狗日的Key

    被突如其来的一个bug困扰了好几天, 起因是, 按键接的红外接收器, 结果发现, 一旦按下之后, IEN1, P0IE的标识位bit5, 被不知道特么的谁归0了, 也就是说, 按键只能被按下一次, 再 ...

  3. Oracle通过sqlplus spool导入导出数据

    第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总结) 第一部分 第一步 :这是我的导出数据的脚本call.sqlconn scott/tigerset echo offset ...

  4. ACM题目————Find them, Catch them

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

  5. Cocos2dx框架常用单词(一)

    收集了一些Cocos2dx里面主要单词的翻译. Toggle:切换Finite:有限Instant:瞬时interval:间隔Flip:翻转place:座位,放置Target:目标reverse:反向 ...

  6. linux socket高性能服务器处理框架

    这个博客很多东西 http://blog.csdn.net/luozhonghua2014/article/details/37041765   思考一种高性能的服务器处理框架 1.首先需要一个内存池 ...

  7. Uva 11584,划分成回文串

    题目链接:https://uva.onlinejudge.org/external/115/11584.pdf 题意: 一个字符串,将它划分一下,使得每个串都是回文串,求最少的回文串个数. 分析: d ...

  8. Spring 的优秀工具类盘点

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  9. WebForm组合查询

    封转类 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <sum ...

  10. nn

    <li> <a href="#" class="dropdown-toggle"> <i class="icon-des ...