scala 學習 之 手動安裝 sbt (通過修改 sbt-launch 更改 sbt 源)


基本環境:

MAC

 

背景:

sbt 之於scala 就像 maven 之於 java. 然而 sbt 在牆外,要想使用必須翻牆。實踐證明,翻牆也不好使, 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM