SBT+IDEA Scala开发环境搭建

SBT+IDEA Scala开发环境搭建

前言

利用 IDEA 开发 Scala程序有一段时间了,总是有一个问题困扰着我,那就是Idea里面的 SBT 使用的配置根本没有使用我本身下载的 SBT 里面的配置,致使 Idea 里面新建 sbt 项目老是没法使用代理下载依赖,从而使得下载失败。我只能 每次都在外面使用 cmd,先 sbt update 而后 gen-idea 而后再加载到 Idea。效率之地下,让人吐血。今天狠下心来, 必定要把这个问题攻破。html

常规SBT配置

首先下载SBT,解压到你想要安装的地方,个人安装目录以下:java

D:\softwares\dev\java\sbt>dir
 驱动器 D 中的卷是 NewDisk
 卷的序列号是 0E5B-9C07

 D:\softwares\dev\java\sbt 的目录

2015/10/16  11:14    <DIR>          .
2015/10/16  11:14    <DIR>          ..
2015/09/06  09:02    <DIR>          bin
2015/10/19  19:07    <DIR>          boot
2015/09/06  09:02    <DIR>          conf
2015/10/19  20:22    <DIR>          ivy2
               0 个文件              0 字节
               6 个目录 150,068,903,936 可用字节

从解压的目录中当即能够发现,bin 目录和 conf 目录,毫无疑问,bin 目录就是执行文件所在目录
进入 bin 目录,看到 sbt.bat, 这个文件就是 windows 的 sbt 执行文件,查看一下里面的内容,发现以下信息:windows

@REM SBT launcher script
@REM
@REM Envioronment:
@REM JAVA_HOME - location of a JDK home dir (mandatory)
@REM SBT_OPTS  - JVM options (optional)
@REM Configuration:
@REM sbtconfig.txt found in the SBT_HOME.

@REM   ZOMG! We need delayed expansion to build up CFG_OPTS later
@setlocal enabledelayedexpansion

@echo off
set SBT_HOME=%~dp0

rem FIRST we load the config file of extra options.
set FN=%SBT_HOME%\..\conf\sbtconfig.txt
set CFG_OPTS=
FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO (
  set DO_NOT_REUSE_ME=%%i
  rem ZOMG (Part #2) WE use !! here to delay the expansion of
  rem CFG_OPTS, otherwise it remains "" for this loop.
  set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME!
)

rem We use the value of the JAVACMD environment variable if defined
set _JAVACMD=%JAVACMD%

if "%_JAVACMD%"=="" (
  if not "%JAVA_HOME%"=="" (
    if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe"
  )
)

if "%_JAVACMD%"=="" set _JAVACMD=java

#这里能够看出当 JAVA_OPTS 这个环境变量设置了的话就会不会使用 config 里面的环境变量了
rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
set _JAVA_OPTS=%JAVA_OPTS%
if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS%

:run

#最后执行行调用 java %JAVA_OPTS% %SBT-OPTS% %SBT_HOME%sbt-lauch.jar
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
if ERRORLEVEL 1 goto error
goto end

:error
@endlocal
exit /B 1


:end
@endlocal
exit /B 0

从代码中能够发现最重要的配置文件就是 %SBT_HOME%..\conf\sbtconfig.txt ,因此第一步就是
设置环境变量:app

SBT_HOME=D:\softwares\dev\java\sbt

修改配置文件 conf/sbtconfig.txt

一些常见的配置能够在网上查到,从上面分析能够看出里面就是设置一些 JAVA_OPTS,下面是个人配置:jvm

# 设置 jvm 内存

-Xmx512M

-XX:MaxPermSize=256m

-XX:ReservedCodeCacheSize=128m



# 其余的sbt参数

-Dsbt.log.format=true
-Dhttp.proxyHost=proxy.tencent.com
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=proxy.tencent.com
-Dhttps.proxyPort=8080

# 设置boot目录以及ivy本地仓库地址
-Dsbt.boot.directory=D:/softwares/dev/java/sbt/boot/
-Dsbt.ivy.home=D:/softwares/dev/java/sbt/ivy2/

修改 idea.exe.vmoptions/idea64.exe.vmoptions

然而上面的一切对 Idea 来讲不起做为,缘由是 Idea 直接调用的就是 sbt-launch.jar 根本没有参数可言,
为了使idea可以修改 sbt-launch.jar 中的默认参数,一方面是修改 sbt-launch.jar 中的配置文件,另外一个途径
就是修改 idea 全局 vmoptions。这个文件在 Idea 安装目录 bin 目录下面,一个对应 32 位, 一个对应 64 位,
对应修改以后变为以下:maven

-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=225m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Dsbt.log.format=true

-Dhttp.proxyHost=proxy.tencent.com
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=proxy.tencent.com
-Dhttps.proxyPort=8080
-Dsbt.boot.directory=D:/softwares/dev/java/sbt/boot/
-Dsbt.ivy.home=D:/softwares/dev/java/sbt/ivy2/

下面从新启动Idea测试一下效果。 彷佛没什么用,干脆直接修改 sbt-launch.jar 文件中 sbt 目录下面的 sbt.boot.properties 文件ide

[scala]
  version: ${sbt.scala.version-auto}

[app]
  org: ${sbt.organization-org.scala-sbt}
  name: sbt
  version: ${sbt.version-read(sbt.version)[0.13.5]}
  class: ${sbt.main.class-sbt.xMain}
  components: xsbti,extra
  cross-versioned: ${sbt.cross.versioned-false}
  resources: ${sbt.extraClasspath-}

[repositories]
  local
  typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
  maven-central

[boot]
  directory: D:/softwares/dev/java/sbt/boot/

[ivy]
  ivy-home: D:/softwares/dev/java/sbt/ivy2/
  checksums: ${sbt.checksums-sha1,md5}
  override-build-repos: ${sbt.override.build.repos-false}
  repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories}

再测试一下效果。搞定oop

参考资料

http://9leg.com/scala/2015/10/17/scala-play-setting.html测试