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插件,一直都是在网上下载别人的用,今天有时间,就把这段遗憾补回来,自己生成一下,废话不说,開始了. 本文 ...
随机推荐
- 【secureCRT】永久设置背景色和文字颜色
- 161107、spring异步调用,完美解决!
项目中,用户抢单,下单需要向对方推送消息,但是加上推送就会造成抢单和下单性能降低,反应变慢,因为抢单下单动作跟推送部分是同步的,现在想改成异步推送. 在Java应用中,绝大多数情况下都是通过同步的方式 ...
- Effective C++第三遍
试图调用private的copy或赋值函数是编译期错误,而调用没有具体定义的函数则是连接期错误. 以对象管理资源:智能指针RAII(资源获取立即初始化)后都是对象,但有时候,比如(API的)函数参数要 ...
- 杭电1012-u Calculate e
#include<stdlib.h>#include <stdio.h> int main () { printf("n e\n"); ...
- sql 2000以及2005以上获取数据库中所有的表(不包括系统表)
---------------------------------------------------------------------------- --sql 2005以上数据库 --- 获取数 ...
- YTU 2297: KMP模式匹配 三(串)
2297: KMP模式匹配 三(串) 时间限制: 1 Sec 内存限制: 128 MB 提交: 25 解决: 16 [提交][状态][讨论版] [Edit] [TestData] 题目描述 输入一 ...
- phpcms 03
继续上次对header.html文件的分析 logo<a href="{siteurl($siteid)}/"><img src="{IMG_PATH} ...
- linux下如何安装配置redis及主从配置
redis的优点:支持主从备份,操作指令丰富,支持异步的数据持久化 将 redis 安装到 /usr/local/webserver/redis 1.下载安装包 wget http://redis.g ...
- Linux内核中的Kconfig、xx.defconfig、xx.config、Makefile
什么是Kconfig.xx.defconfig.xx.config.Makefile Kconfig: 一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项. xx.deconfig: Li ...
- Intent官方教程(3)各属性介绍
Building an Intent An Intent object carries information that the Android system uses to determine wh ...