安装sbt
Linux版本:Deepin15.1
sbt:0.13.11
下载sbt-launch.jar,然后将源改为国内源(aliyun),我选择将sbt安装在/usr/local/sbt中(随意)。
1 2 3 4
| $sudo mkdir /usr/local/sbt $sudo chown -R hadoop /usr/local/sbt #我的用户名是 hadoop. $cd /usr/local/sbt $mkdir sbtlaunch #用来放sbt-launch.jar
|
1.下载sbt-launch.jar,并存放至/usr/local/sbt/sbtlaunch
1 2
| $cd /usr/local/sbt/sbtlaunch $unzip -q ./sbt-launch.jar #解压
|
2.需要修改其中的./sbt/sbt.boot.properties文件,将[repositories]处修改为如下内容
因为国内众所周知的原因,连接国外https会慢,所以这里都换成http
1 2
| $cd /usr/local/sbt/sbtlaunch $vim ./sbt/sbt.boot.properties
|
修改为:
1 2 3 4 5 6 7 8
| [repositories] local aliyun-nexus: http://maven.aliyun.com/nexus/content/groups/public/ repox-maven: http://repox.gtan.com:8078/ repox-ivy: http://repox.gtan.com:8078/ , [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] #jcenter: https://jcenter.bintray.com/ maven-central
|
还有/usr/local/sbt/sbtlaunch中的
这些文件内容也最好改一下。改成如下图所示:http://dl.bintray.com/sbt/sbt-plugin-releases/
还有在~/.sbt/repositrories文件中(没有就建一个)
1
| $vim ~/.sbt/repositrories
|
也添加:
1 2 3 4
| [repositories] local repox-maven: http://repox.gtan.com:8078/ repox-ivy: http://repox.gtan.com:8078/ , [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
|
上面所有这些是为了换个下载仓库。
3.删除原来的sbt-launch.文件,然后重新打包
1 2
| $rm ./sbt-launch.jar #删除旧的 $jar -cfM ./sbt-launch.jar . #重新打一个jar
|
4.在/usr/local/sbt目录下创建sbt脚本文件并赋予可执行权限,来执行sbt-launch.jar
1 2
| $cd /usr/lcoal/sbt $vim ./sbt #新建sbt脚本
|
添加如下内容:
1 2
| SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" java $SBT_OPTS -jar /usr/local/sbt/sbtlaunch/sbt-launch.jar "$@"
|
5.保存后,为./sbt增加可执行权限:
6.最后检验sbt是否可用
改了镜像速度应该会上去一些,在国内墙环境下主要还是看运气,希望大家测试一下。
然后按照书上新建项目,进行打包运行测试,或者照下面的Helloworld项目测试。
7.创建hello world项目,并编译,打包,运行。
1 2 3 4 5
| $mkdir ~/simpleapp $mkdir ~/simpleapp/src $mkdir ~/simpleapp/src/main $mkdir ~/simpleapp/src/main/scala $vim ~/simpleapp/src/main/scala/SimpleApp.scala #内容如下
|
SimpleApp.Scala
1 2 3 4 5
| object SimpleApp{ def main(args: Array[String]){ println("Hello World!") } }
|
7.2 创建simple.sbt
1 2
| $cd ~/simpleapp $vim ./simple.sbt #内容如下
|
simple.sbt内容如下:每一行之间空一行。scala version 和 Spark版本信息根据所安装的spark所写。笔者安装的是spark2.1.0和scala 2.11.8。
1 2 3 4 5 6 7 8
| name :="Simple Project" version :="1.0" scalaVersion := "2.11.8" libraryDependencies +="org.apache.spark" %% "spark-core" % "2.1.0"
|
7.3配置环境变量,编译和运行。
注意:
打包时带参数-Dsbt.override.build.repos=true
这个参数是为了让sbt用你设置的仓库下载
1
| $sbt -Dsbt.override.build.repos=true package
|
或者直接配置路径,这样就不用每次带参数了:
在/usr/local/sbt下的sbt文件里,SBT_OPTS=””里面加上-Dsbt.override.build.repos=true ,这样就不用带参数了,直接sbt package打包就好
建议选择直接配置路径。
下面给出完整步骤:
1 2 3 4 5 6 7
| $vim ~/.bashrc #在开头添加如下内容:export PATH=/usr/local/sbt:$PATH $source ~/.bashrc #使之生效 $cd ~/simpleapp $sbt compile #编译,可以省略这步 直接打包 $sbt package #打包 前提是你已经将-Dsbt.override.build.repos=true这个参数配了 $/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/simpleapp/target/scala-2.11/simple-project_2.11-1.0.jar #将生成的jar包通过spark-summit提交到spark中执行
|
这样下载依赖包会非常快,一堆[SUCESS]过去,没改之前依赖包一直卡着下不动根本无法打包,改了之后就很快了很快就打包编译了。
下面给出我的截图(这个截图没有截出下载依赖包的界面。。。):
是不是速度和之前比快了很多!
还有一种方法 搭建repox
from github:
从源码编译打包
repox暂时没有发布二进制包,只能从源码编译。
1 2 3 4 5
| $ git clone https://github.com/Centaur/repox.git $ cd repox/src/main/resources/admin $ bower install $ cd ../../../.. $ sbt assembly
|
上述中的bower依赖于Node.js和npm,因此需要先安装node.js。sbt将会在target/Scala-2.11/目录下生成 repox-assembly-$VERSION.jar
运行
1
| $ java -Xmx512m -jar repox-assembly-$VERSION.jar
|
repox监听所有网络接口上的8078端口。repox缓存的文件保存在 ~/.repox/storage 目录下,配置数据保存在 ~/.repox/journal 目录下,日志文件是 ~/.repox/repox.log 因此如果要备份数据,只需要备份 ~/.repox 目录即可。
以下假设repox部署在192.168.0.120这台服务器上。
配置
repox使用akka-persistence来保存配置信息(这当然不是必须的,repox用这个场景demo了akka-persistence的用法)。 从浏览器连接 http://192.168.0.120:8078/admin/admin.html 通过web界面对repox进行配置。从这里开始
登录密码
Repox web admin 默认密码为zhimakaimen.
sbt 配置
为了充分发挥repox的优势,在开发者本机上需要做两件事。
1.配置 ~/.sbt/repositories 文件(如果文件还未创建过,则创建它),除了本地缓存外,仅使用repox作为仓库。文件内容如下:
1 2 3 4
| [repositories] local repox-maven: http://192.168.0.120:8078/ repox-ivy: http://192.168.0.120:8078/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
|
请注意,repox-maven 与 repox-ivy 的次序是重要的,请将 repox-maven 写在 repox-ivy 的前面。
2.配置sbt,使它仅使用~/.sbt/repositories中的内容。
如果你使用命令行,请在sbt命令行参数中添加 -Dsbt.override.build.repos=true 。例如我的sbt shell脚本的内容是这样的:
1 2 3
| #!/bin/sh export SBT_OPTS="-Dsbt.override.build.repos=true" exec java -Xmx512M ${SBT_OPTS} -jar $(dirname "$0")/sbt-launch.jar "$@"
|
Renkai注:个人试了下只做第一步不做第二步似乎也是蛮好用的
Author:张琼
打赏:
上一篇:maven国内速度过慢解决
下一篇:消息中间件应用开发