欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SBT 工程部署记录

程序员文章站 2022-06-13 15:19:04
...

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 "[email protected]"

注: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 "[email protected]"

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