scala 学习 之 手动安装 sbt (通过修改 sbt-launch 更改 sbt 源)

基本环境:

MAC

 

背景:

sbt 之于scala 就像 maven 之于 java. 然而 sbt 在墙外,要想使用必须FQ。实践证明,FQ也不好使, maven 好歹能下载下来,而 sbt 直接就是下载失败,根本无法安装。最后只能曲线救国,在网络上找到通过sbt-launch 来启动sbt 的方法。其主要原理是通过修改 sbt-launch.jar 内部的 repositories 位置(改为国内阿里源)来间接改变sbt 仓库源,提高sbt 查找依赖的效率。下面介绍手动安装 sbt 详细过程。

 

解决:

1. 下载sbt-launch.jar,然后将源改为国内源(aliyun),我选择将sbt安装在/usr/local/sbt中

sudo mkdir /usr/local/sbt
sudo chown -R hadoop /usr/local/sbt   #username is hadoop.
cd /usr/local/sbt
mkdir sbtlaunch   #store sbt-launch.jar

下载 sbt-launch.jar 可以到相关仓库,推荐阿里仓库:http://maven.aliyun.com/nexus/#nexus-search;quick~sbt-launch

wget http://maven.aliyun.com/nexus/content/repositories/central/org/scala-sbt/sbt-launch/1.1.1/sbt-launch-1.1.1.jar

2. 修改 jar 包中的./sbt/sbt.boot.properties文件,将[repositories]处修改为如下内容,即增加一条aliyun-nexus的镜像

cd /usr/local/sbt/sbtlaunch
mv sbt-launch-1.1.1.jar sbt-launch.jar
unzip -q ./sbt-launch.jar
vim ./sbt/sbt.boot.properties
 
[repositories]
  local
  aliyun: http://maven.aliyun.com/nexus/content/groups/public/
  central: http://repo1.maven.org/maven2/

3.删除原来的sbt-launch.文件,然后重新打包

rm ./sbt-launch.jar           #delete the old jar
jar -cfM ./sbt-launch.jar .   #create new jar 

4.在/usr/local/sbt目录下创建sbt脚本文件并赋予可执行权限,来执行sbt-launch.jar

cd /usr/lcoal/sbt
vim ./sbt         #create sbt script
添加如下内容:
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled"
java $SBT_OPTS -jar /usr/local/sbt/sbtlaunch/sbt-launch.jar "$@"

5. 保存后,为./sbt增加可执行权限:

chmod u+x ./sbt

6.最后检验sbt是否可用

./sbt version

第一次可能有点慢,后面就好了。输出下面表示正确。

 7.添加到环境变量

vim .bashrc
添加下面内容
export SBT_HOME=/usr/local/sbt
export PATH=$SBT_HOME:$SCALA_HOME/bin:$PATH

最后执行 source .bashrc

8. 使用 sbt 运行一个scala 小 demo

  1) 生成目录结构, sbt 是插件话的思维,所有都是插件组成,所以核心的 sbt 没有自动生成目录结构的功能。网上有生成目录文件的插件,见 git: https://github.com/softprops/np 不过我觉得也没什么必要,直接自己生成就行了。可以按照下面的步骤生成。

$ touch build.sbt && echo "name := 'hello'\nversion := '1.0' " > build.sbt
$ mkdir -p src/{main,test}/scala
$ touch README.md && echo "new project" > README.md

上面的步骤是固定的,如果嫌麻烦的话,可以直接写一个shell 文件串联起来,在我们的 sbt 根目录下面新建 sbt-np(touch sbt-np) 文件,然后添加下面内容:

#!/bin/sh
dir=$(pwd)
cd -P ${dir}
set -ue
touch build.sbt
mkdir -p src/{main,test}/scala
touch README.md && echo "new project" > README.md

 创建上面的 sbt-np(sbt new project) 脚本之后,我们可以 source .bashrc, 让环境变量重新索引下面的可执行文件。下次创建新项目直接执行下面命令即可:

mkdir your-project-name#创建根目录还是必须滴
sh sbt-np#创建子目录

  2)进入sbt 模式,编译,打包我们的代码:

 将我们新建的目录用你喜欢的IDE 打开,同时在项目根目录执行 sbt 进入命令行模式,执行交互式操作。常用操作:

sbt run #运行代码,多个main 会让你选择
sbt compile #编译代码
sbt package #打包成jar包

我们执行上面两步代码运行情况如下:

目录结构:

 

  添加代码  vim src/main/scala/Test.scala

object Hi {
    def main(args: Array[String]) = println("Hi!")
}

sbt run

 

后话:

1. unzip -q 选项是干什么的呢? 

是静默解压的意思,就像 tar -zxf 不添加 v 选项一样,不把解压过程显示出来。

2. 如果使用idea 实际上已经自带了sbt 功能。推荐使用 IDEA, 打包文件

 

附录:

1. https://github.com/softprops/np

2. http://wiki.jikexueyuan.com/project/sbt-getting-started/install-sbt.html

3. https://www.2cto.com/kf/201612/575063.html

4. https://www.jianshu.com/p/9494aecebc8d

5. http://www.importnew.com/4311.html

6. https://blog.csdn.net/microsoft2014/article/details/54572502

7. http://www.powerxing.com/spark-quick-start-guide/

8. https://www.jianshu.com/p/c8c48b0b3866

9. http://maven.aliyun.com/nexus/#nexus-search;quick~sbt-launch

 

posted @ 2018-04-01 12:54  hank-yan  阅读(6395)  评论(0编辑  收藏  举报