文档章节

使用SBT构建Scala项目

四叶草666
 四叶草666
发布于 2017/07/18 16:41
字数 1464
阅读 44
收藏 0

一、安装SBT

在SBT的官网(http://www.scala-sbt.org/)下载相应版本的SBT,此处我下载的是:sbt-0.13.15.msi

附sbt-0.13.15.msi百度云盘下载地址:链接:http://pan.baidu.com/s/1eSxi1Ku 密码:59e7

双击sbt-0.13.15安装sbt环境。

Windows环境下建议配置SBT的环境变量。具体步骤不说了,就是把sbt/bin目录配置进PATH:

在SBT_HOME/bin下有个sbt.bat,查看该bat文件。可以了解到该文件依赖于SBT_HOME/conf/sbtconfig.txt。

SBT_HOME/conf/sbtconfig.txt中添加:

 
  1. -Dfile.encoding=UTF8
  2.  
  3. -Dsbt.boot.directory=d:/sbt-repository/boot/
  4.  
  5. -Dsbt.ivy.home=d:/sbt-repository/

 说明:-Dsbt.boot.directory、-Dsbt.ivy.home这两个是配置sbt.boot目录和ivy.home目录,用于缓存的jar包等信息存放位置。默认情况下jar包等信息存放于user home目录。

另外运行sbt的JVM参数也可以在sbtconfig.txt中指定。

二、SBT命令行环境

在命令行中进入工程目录,输入sbt,进入sbt的命令行。(这里建议进入工程目录再运行sbt命令。)

wpsC46A.tmp

注意:第一次使用sbt命令,程序会去下载所需要的jar包。整个过程需要很长时间,要耐心等待。当窗口中出现">"提示符,则说明sbt已经成功启动。下载完成后,显示如下图:

wpsC49A.tmp

sbt命令

帮助命令 help

wpsC4AB.tmp

查看命令的详细帮助文档

wpsC4AC.tmp

wpsC4BC.tmp

 

显示项目配置 show

show name :查看当前项目的名字。

show libraryDependencies :查看当前项目依赖的库。

 

使用Scala控制台 console

输入console回车,会在当前会话内启动一个REPL。sbt会加载当前项目依赖的全部jar包和当前的代码。即可以在这个解释器里实验你的半成品。

因为依赖的jar包也都被加载了,所以对于那些你可能还不熟悉的第三方库,你有可以在console里玩个痛快!

 

运行Scala程序 run

若项目有个对象带有方法(或者对象继承了 App 品质(trait)),那么可以通过输入 run 在 sbt 中运行代码。

在 sbt 发现有多个 main 方法时,它会询问你想执行哪一个,输入对应的序号即可。

> run

[warn] Multiple main classes detected. Run 'show discoveredMainClasses' to see the list

 

Multiple main classes detected, select one to run:

 

[1] KafkaWordCount

[2] LocalCountWord1

[3] LocalCountWord2

[4] MasterCountWord1

[5] MasterCountWord2

 

Enter number: 1 

 

[info] Running KafkaWordCount

 

三、使用SBT构建项目

在项目目录下创建project目录。

wpsC4BD.tmp

hello-sbt是项目目录。project是其子目录。 

在project目录中创建build.properties文件。在文件中写入使用sbt的版本。若本机没有相应的版本,sbt会自动下载需要的版本。(本机使用当前最新sbt版本0.13.15)

hello-sbt/project/build.properties配置为:

 
  1. sbt.version=0.13.15

 在项目目录下,创建hello-sbt/build.sbt,填入相应的项目配置:

 
  1. name:="hello-sbt"
  2. organization:="sjq.sbt"
  3. version:="0.1"
  4. scalaVersion:="2.11.8"

接着在命令行中,进入当前工程,使用sbt命令,当看见尖括号提示符,即表示创建成功。(注:第一次使用sbt需要等待很长时间去下载相应文件。

wpsC4D0.tmp

sbt-0.13.15资源库离线包下载路径(已经下载好sbt、sbteclipse、assembly所需支持包),下载地址:链接:http://pan.baidu.com/s/1pLluQG7 密码:0m77

四、下载sbteclipse、sbt-assembly插件

 

添加sbteclipse、sbt-assembly(集成打包jar包插件)

在工程目录的project目录下创建hello-sbt/project/plugins.sbt,其中添加插件内容。

 
  1. addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
  2. addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")

执行reload命令

wpsC4D2.tmp

接着直接执行eclipse命令,即可生成eclipse项目文件。 

在eclipse中导入工程即可:

wpsC4D3.tmp

如果没有创建src目录,手动创建如下目录,然后在重新运行eclipse命令即可。

src/main/scala

src/main/java

src/main/resources

src/test/scala

src/test/scala

src/test/resources 

项目导入到Eclipse中显示如下:

wpsC4E4.tmp

若发现src目录下没有resources可以尝试手动创建,也可以在build.sbt中添加如下配置。

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource

总之很简单。 

五、SBT与Scala程序

编写HelloSBT程序。

HelloSBT.scala

 
  1. package sjb
  2.  
  3. object HelloSBT{
  4.     def main(args:Array[String]): Unit={
  5.         println("Hello SBT !!!")
  6.     }
  7. }

在src/main/scala中写入HelloSBT程序,生成的eclipse项目如下:wpsC4E5.tmp

使用sbt编译程序

在sbt命令行下输入compile

wpsC4F5.tmp

 使用sbt运行程序

在sbt命令行下输入run

wpsC4F6.tmp

六、sbt  assembly打包依赖包

 

 

hello-sbt/bulid.sbt :

 
  1. name:="hello-sbt"
  2. organization:="sjq.sbt"
  3. version:="0.1-SNAPSHOT"
  4. scalaVersion:="2.11.8"

 

hello-sbt/project/bulid.properties :

 
  1. sbt.version=0.13.15

hello-sbt/project/plugins.sbt :

 
  1. addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
  2. addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")

进入命令行:输入 : sbt

>eclipse

>compile

>run

 

>assembly 命令进行统一打包(包括依赖包)

生成的jar包会把工程所依赖的jar包全部打包。

 

七、sbt添加第三方依赖包

添加依赖包,要添加一个第三方库的依赖,直接将jar包放到工程lib目录下:

 

 

再执行“六、sbt  assembly打包依赖包”,即可将第三方依赖jar包打包。

八、执行assembly命令报java.lang.OutOfMemoryError

需要给工程打个jar包,到对应的目录下,执行命令行参数:

 
  1. >sbt 
  2. >assembly  

堆栈溢出

出现错误:Java.lang.StackOverflowError

对于这个溢出,需要更改stack的大小,找到sbt的配置文件:sbtconfig.txt,添加内容:

 
  1. -Xss2m 

 

内存溢出,出现错误:java.lang.OutOfMemoryError,常见的内存溢出现象,添加配置信息:

 
  1. -Xms64m  
  2. -Xmx500m  ​

大小可以自行更改。

sbt/conf/sbtconfig.txt配置信息一览

 
  1. # Set the java args to high
  2. -Xms640m  
  3. -Xmx5000m  
  4. -Xss20m  
  5. -XX:PermSize=1000M  
  6. -XX:MaxNewSize=2000m  
  7. -XX:MaxPermSize=4000m 
  8.  
  9. # Set the extra SBT options
  10. -Dsbt.log.format=true
  11. -Dfile.encoding=UTF8
  12. -Dsbt.boot.directory=d:/sbt-repository/boot/
  13. -Dsbt.ivy.home=d:/sbt-repository/

九、 sbt发布assembly解决jar包冲突问题

在项目工程的bulid.sbt配置文件,添加如下配置:

 
  1. mergeStrategy in assembly <<= (mergeStrategy in assembly) { mergeStrategy => {  
  2.  case entry => {  
  3.    val strategy = mergeStrategy(entry)  
  4.    if (strategy == MergeStrategy.deduplicate) MergeStrategy.first  
  5.    else strategy  
  6.  }  
  7. }}  ​

hello-sbt/bulid.sbt的完整配置如下:

 
  1. name:="hello-sbt"
  2. organization:="sjq.sbt"
  3. version:="0.1"
  4. scalaVersion:="2.11.8"
  5. EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource
  6.  
  7. mergeStrategy in assembly <<= (mergeStrategy in assembly) { mergeStrategy => {  
  8.  case entry => {  
  9.    val strategy = mergeStrategy(entry)  
  10.    if (strategy == MergeStrategy.deduplicate) MergeStrategy.first  
  11.    else strategy  
  12.  }  
  13. }}  

参考资料:

http://www.cnblogs.com/shijiaqi1066/p/5103735.html

http://wiki.jikexueyuan.com/project/sbt-getting-started/build-define.html

sbt发布assembly解决jar包冲突问题 deduplicate: different file contents found in the following

© 著作权归作者所有

共有 人打赏支持
四叶草666
粉丝 0
博文 51
码字总数 50778
作品 0
深圳
程序员
sbt笔记八 scala构建定义

.scala构建定义(sbt 0.13.0 Snapshot) 当前页面假定你已经阅读了Getting Started Guide的前面章节,尤其是.sbt build definition和more about settings。 sbt是递归的 build.sbt非常简单,...

Ellipse
2013/04/06
0
0
SPARK学习之 --- eclipse / sbt / scala 配置

工作以及兴趣所致,开始了spark学习之旅,浏览网上大牛们的博客 文章,并且结合官网docs,刚开始云里雾里,现在也能雾里看到点花了。 学习spark,首先我们知道spark是由scala语言编写而成,至...

莫问viva
2016/01/12
1K
0
我们为什么放弃SBT回归Maven

显然,我是在说Scala项目。在我们讨论这个话题时,SBT的稳定版本是0.13,我想再过几年,本文提及的问题会一一得到解决,从而让SBT成为一个真正成熟强大的构建工具。 在我们目前开发的系统中,...

bluishglc
2017/02/27
0
0
SBT-Simple Build Tool入门

SBT-Simple Build Tool入门 sbt的源文件目录结构 src/ main/ resources/ <files to include in main jar here> scala/ <main Scala sources> java/ <main Java sources> test/ resources <f......

秋风醉了
2015/01/06
0
0
Scala入门之工具篇

我初次接触Scala时,由于对Scala相关的工具不够熟悉,学习的效率低下。所以本文主要介绍Scala编程所必备的工具。一般而言,我们接触一门编程语言,都需要接触这门语言的编译器、REPL、构建工...

碎镜
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部