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插件,一直都是在网上下载别人的用,今天有时间,就把这段遗憾补回来,自己生成一下,废话不说,開始了. 本文 ...
随机推荐
- 【python cookbook】【数据结构与算法】17.从字典中提取子集
问题:想创建一个字典,其本身是另一个字典的子集 解决方案:利用字典推导式(dictionary comprehension)可轻松解决 # example of extracting a subset ...
- oracle sql获取随机数
SQL> select round(dbms_random.value(10000,99999)) num from dual;
- Java Properties工具类详解
1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...
- jquery plugins
jQuery官网插件 jQuery自定义滚动条样式插件 jQuery custom content scroller examples Twitter typeahead typeahead.js t ...
- struts2-json-plugin插件实现异步通信
用例需要依赖的jar: struts2-core.jar struts2-convention-plugin.jar,非必须, struts2-json-plugin.jar org.codehaus ...
- 收藏本网站兼容火狐IE
<script type="text/javascript"> function AddFavorite(sURL, sTitle) {try { window.ext ...
- js命名空间笔记
在量比较大或者多人编写的情况下,命名冲突就很有可能发生,同一个页面引用了两个命名相同功能不同的文件,调用的时候就会出问题.因此使用JS命名空间很重要. 1.采用字面量方法创建命名空间: var a={ ...
- vnc里鼠标拖动终端就会产生ctrl+c终端
然后把有道词典给关了就好了...
- ie6下兼容问题
最小高度问题:overflow:hidden 在ie6.7下 li本身不浮动 内容浮动 li产生3像素间隙 解决:vertical-align:top; 二.当ie6下最小高度问题和li间隙问题共存时 ...
- JQuery知识快览之五—操作属性和结构
前文提到JQuery提供了丰富的内置方法来操作对象集,本文主要介绍JQuery中的那些内置操作属性和DOM结构的方法. prop还是attr? 从JQuery1.6版开始,新增了prop方法来获取和设 ...