利用 IDEA 開發 Scala程序有一段時間了,總是有一個問題困擾着我,那就是Idea裏面的 SBT 使用的配置根本沒有使用我本身下載的 SBT 裏面的配置,致使 Idea 裏面新建 sbt 項目老是沒法使用代理下載依賴,從而使得下載失敗。我只能 每次都在外面使用 cmd,先 sbt update 而後 gen-idea 而後再加載到 Idea。效率之地下,讓人吐血。今天狠下心來, 必定要把這個問題攻破。html
首先下載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
一些常見的配置能夠在網上查到,從上面分析能夠看出裏面就是設置一些 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 來講不起做爲,緣由是 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