SBT 工程部署記錄

1、出現 sbt 下載錯誤

  • 查看 ~/.sbt/repositories
  • 在 built.sbt 文件中添加(libraryDependencies 在什麼文件,下面這一句就加在什麼文件中)
 resolvers += "Sonatype releases" at "https://oss.sonatype.org/content/repositories/releases"

2、中文編碼錯誤,除了要看文件編碼是否 UTF-8 之外,還要在 built.sbt 中加一句

javacOptions in shared ++= Seq("-encoding", "UTF-8")

3、SBT 改源

下載sbt啓動jar包:

mkdir ~/bin
wget https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.11/sbt-launch.jar

創建~/bin/sbt腳本:

SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -Dfile.encoding=UTF-8 -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

注:Java8開始不在需要-XX:MaxPermSize參數
給腳本可執行權限:

chmod u+x ~/bin/sbt

使用Repox加速sbt

Repox(社區公服,若大家覺得好友的話希望能捐助) 是一款:“改善sbt解決依賴的速度”的開源軟件。 我們可以使用它來解決下載依賴過慢和偉大的牆造成的很多資源不能訪問問題。這裏摘錄官方WIKI的入門指南
配置 ~/.sbt/repositories 文件(如果文件還未創建過,則創建它),除了本地緩存外,僅使用repox作爲倉庫。文件內容如下:

[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]

請注意,repox-maven 與 repox-ivy 的次序是重要的,請將 repox-maven 寫在 repox-ivy 的前面.

如果你使用命令行,請在sbt命令行參數中添加 -Dsbt.override.build.repos=true 。例如我的sbt shell腳本的內容是這樣的:

#!/bin/sh
export SBT_OPTS="-Dsbt.override.build.repos=true"
exec java -Xmx512M ${SBT_OPTS} -jar $(dirname "$0")/sbt-launch.jar "$@"

如果使用jetbrains IDEA,修改 Preferences->SBT->JVM Options->VM parameters,保證它包含

-Dsbt.override.build.repos=true

如果使用 activator,請打開 ~/.activator/activatorconfig.txt 文件(如果此文件不存在,請創建它。很明顯,配置文件滿天飛也是 typesafe/sbt team的諸多惡趣味之一),在其中添加一行

-Dsbt.override.build.repos=true

4、Play Scala 重啓時總是不生成 pidfile

start_script.sh 如下:

#!/bin/bash

nohup bash -c "/usr/local/apps/app_name/current/api/target/universal/stage/bin/app_name -J-Xmx5120m -J-Xms5120m -J-Xmn1800m -J-Xss256k -J-XX:ParallelGCThreads=8 -J-XX:+UseParNewGC -J-XX:+UseConcMarkSweepGC -J-XX:SurvivorRatio=8 -J-XX:TargetSurvivorRatio=90 -J-XX:MaxTenuringThreshold=15  -Dpidfile.path=/usr/local/apps/app_name/shared/pids/play/9401 -Dhttp.port=9401 -Dfile.encoding=utf8 -Dlogger.file=/usr/local/apps/app_name/current/api/conf/logback.xml  > /dev/null 2>&1 &" &> /dev/null

stop_script.sh 如下:

#!/bin/bash


# the directory where play pids are stored
pids=/usr/local/apps/app_name/shared/pids/play

for file in $(ls -x1 $pids); do
    pid=$(cat $pids/$file 2> /dev/null)
    if [ "$pid" != "" ]; then
        echo "Stopping api server $pid"
        kill $pid; true
    fi
done

rm -f $pids/*

在 stop_script.sh 執行後,再執行 start_script.sh,Play Java 工程可以正常工作,然而 Play Scala 死活不能生成 pidfile,雖然服務可以啓動。

解決方法:

stop_script.sh 中 kill 需要加上 -9,強殺!(都是小坑…害死人)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章