Sbt的使用初步和用sbt插件生成eclipse工程
以前一直是用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工程的更多相关文章
- 由cobertura插件生成测试覆盖率报告
由于cobertura已经集成到maven中,所以可以很方便的直接调用此插件生成报告: 直接运行命令:mvn cobertura:cobertura 就可以直接生成测试报告了. 下面是截图:
- chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]
chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...
- Java+Velocity模板引擎集成插件到Eclipse及使用例子
一.因为我用的是当前最新的Eclipse4.5,Eclipse中安装集成VelocityEclipse插件之前需要先安装其支持插件:Eclipse 2.0 Style Plugin Support 1 ...
- Hibernate(一):安装hibernate插件到eclipse环境
离线安装hibernate插件到eclipse 为什么需要安装hibernate插件到eclipse?在开发eclipse时,很多配置文件信息如果有了hibernate插件集成进来就会有自能提示,方便 ...
- 购物商城学习--第三讲(tomcat插件启动web工程)
此处提到的tomcat插件即maven工程集成的tomcat插件,可以在添加maven的tomcat插件之后,在本地通过脚本或者命令行方式运行web工程,tomcat插件启动只需要修改一个端口即可,非 ...
- 使用EGit插件将Eclipse现有项目分享到git@osc
. . . . . 程序员一定要养成使用版本管理工具的好习惯,即使是自己一个人开发的项目也要加入到版本管理工具中.使用版本管理工具主要有两个好处:一个是更好的管理多个副本,这个优势不用说了:另一个就是 ...
- Jboot使用appassembler-maven-plugin插件生成启动脚本
appassembler-maven-plugin介绍: 使用appassembler-maven-plugin插件可自动生成跨平台的启动脚本,可省去手工写脚本的麻烦,而且还可以生成jsw的后台运行程 ...
- hadoop eclipse插件生成
hadoop eclipse插件生成 做了一年的hadoop开发.还没有自动生成过eclipse插件,一直都是在网上下载别人的用,今天有时间,就把这段遗憾补回来,自己生成一下,废话不说,開始了. 本文 ...
随机推荐
- ubuntu使用记录
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- Delphi Xe 中如何把日期格式统一处理,玩转 TDatetime
日期格式的处理总是会很复杂,因为不同的环境日 期格式也不一样.为了程序统一处理, 最好把格式给统一了: 可以在程序的初始化段: FormatSettings.ShortDateFormat := ' ...
- linux主机vps简单性能测试
第一,CPU.内存.硬盘检测 cat /proc/cpuinfo (查看CPU信息) cat /proc/meminfo (查看内存信息) df -lh (查看硬盘信息) 这个命令可以看到我们购买的V ...
- 电影TS、TC、SCR、R5、BD、HD等版本是什么意思
在很多电影下载网站的影片标题中我们都能看到,比如<刺杀希特勒BD版>.<游龙戏凤TS版>等,这些英文缩写都是什么意思呢?都代表什么画质?以下就是各个版本的具体含义: 1.CAM ...
- 浅析String、StringBuffer、StringBuilder的区别以及性能区别
前奏: 比较三者之间的区别在与区别他们做相同的事情的时候的区别,那就是在我们常见的拼接字符串的时候,StringBuffer.StringBuilder调用的是appende()方法,而String很 ...
- Entrust是一种为Laravel5添加基于角色的权限的简洁而灵活的方法。
安装 首先要在composer.json中添加: "zizaco/entrust": "5.2.x-dev" 然后运行composer install 或者 c ...
- 网络统计学与web前端开发基础技术
网络统计学与web前端开发基础技术 学习web前端开发基础技术(网页设计)需要了解:HTML.CSS.JavaScript三种语言.下面我们就来了解一下这三门技术在网页设计中的用途: HTML是网页内 ...
- Gson心得小笔记
又和往常一样看项目的时候遇到了点新的东西,至少对我来说是个新的东西吧.Gson 废话不多说.个人认为Gson主要用来实现对象和json之间的转换. 例如有个person对象,想要把这个对象转化为jso ...
- 基于PowerShell 3.0的web接口测试
对于web接口测试,做一下总结. 接口测试总结 1. 接口url格式:http://www.xxx.com/a/bbb.html: 2. 接口url后面接的参数格式:“?参数名=参数值&参数名 ...
- 对torch的一点感想
torch是一个基于LuaJIT的科学计算框架,知乎上有个人回答说torch比较适合科研用途, torch与matlab的很多函数很相似