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測試

相關文章
相關標籤/搜索