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,强杀!(都是小坑…害死人)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值