在使用scala进行开发时,特别是混合java进行开发时,都推荐使用sbt,而不是使用maven进行开发。因此,本篇描述了我搭建一个基本的sbt环境以及相应的配置信息,并且在idea中也能够识别相应的配置信息。
默认情况下,scala的配置信息使用默认值均会使用 ~/.ivy2以及~/.sbt,作为开发人员,肯定不会使用这些默认值,而是使用统一的配置目录及相关信息.
默认安装情况
默认情况下,将sbt文件从官方(http://www.scala-sbt.org/download.html)下载下来,并解压至指定的目录之后。配置好环境变量(主要是bin)之后,运行sbt,将使用默认的配置下载相应的组件信息。
- ivy存储配置信息 默认存储在~/.ivy2目录下,主要包括在整个项目开发中所使用的jar缓存,类型maven中的repository
- sbt启动信息 默认存储至~/.sbt 目录下,主要包括sbt启动时所依赖的组件,如scala信息以及sbt本身的各项jar文件.
自定义配置
其实这些配置信息都可以通过sbt自带的配置文件进行修改,网上在类似替换jar文件,或者在~/.sbt中增加配置项这些作法。但对于不想将配置信息放在~目录中来说,这些都不太方便。要修改这些信息,也很方便,在linux中,我们只需要修改文件sbtopts即可.此文件随sbt提供,在sbt目录下的conf目录中。具体配置如下所示:
# Path to global settings/plugins directory (default: ~/.sbt) # 配置sbt相应配置信息存储的目录,这里直接设置为原sbt的安装目录下的conf目录,即与默认的conf在同一个目录 -sbt-dir /data/e/tools/sbt/conf # Path to shared boot directory (default: ~/.sbt/boot in 0.11 series) # 即sbt的启动信息存储目录,这里配置为sbt安装目录下的boot目录 -sbt-boot /data/e/tools/sbt/boot # Path to local Ivy repository (default: ~/.ivy2) # ivy仓库存储目录,这里配置为一个特别的存储仓库(与maven仓库不在同一个位置) -ivy /data/e/ivy2 # Use local caches for projects, no sharing. # 是否每个项目独立进行存储,这里不开启,与maven类似使用共享存储目录 #-no-share # Sets the SBT version to use. -sbt-version 0.13.8 # Scala version (default: latest release) # 这里按照默认配置语法进行修改一定会出错,因此这里暂不指定 #-scala-home <path> #-scala-version <version> # java version (default: java from PATH, currently $(java -version |& grep version)) # 配置java主目录 -java-home /data/java
在配置完以上信息之后,打印默认的命令 sbt -v –version,输出如下所示:
[flym@iflym sbt2]$ sbt -v --version [process_args] java_version = '1.8.0_51' # Executing command line: /data/java/bin/java -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256m -Dsbt.ivy.home=/data/e/ivy2 -Dscala-home=/data/e/java/scala -Dsbt.global.base=/data/e/tools/sbt/conf -Dsbt.boot.directory=/data/e/tools/sbt/boot -Dsbt.version=0.13.8 -jar /data/e/tools/sbt/bin/sbt-launch.jar --version sbt launcher version 0.13.8
即sbt使用替换语句将里面的配置替换为java参数系统参数进行传递,因此也可以在文件里直接编写 -D的参数形式。
指定ivy仓库
因为在上面的配置中,我们已经重新指定的sbt的配置目录(即sbt.global.base),因此只需要在此目录中添加文件 repositories即可。(如果是默认文件 ,则添加到~/.sbt/目录中),简单修改如下所示:
[repositories] local local-maven: file:///data/e/mvn/ typesafe-ivy-releases: http://maven.oschina.net/content/groups/public/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly my-maven-proxy-releases: http://maven.oschina.net/content/groups/public/
在上面的配置中,第一项为默认存储目录local。而第2顶,即是直接重用我们之前在java项目中的配置仓库。因为在之前的maven中,organization中按多个目录存储的,因些这些信息让sbt按照默认maven解析规则进行。网上有说在这里如上面的typesafe-ivy-release设置解析规则的,其实是不需要的。(我在设置了之后反而不正确了)
在上面的配置OK之后,如在sbt项目中配置依赖项之后,在ivy存储中并不会从maven仓库copy相应的文件,而是直接配置相应的引用地址,因此在磁盘中并不会出现2个jar包。如我引用了一个javassist 3.18.2-GA的包,在目录 ivy存储库/org.javassist/javassist中的ivy-data-3.18.2-GA.properties中会出现如下信息:
artifact\:javassist\#pom.original\#pom\#-2034113071.location=/data/e/mvn/org/javassist/javassist/3.18.2-GA/javassist-3.18.2-GA.pom artifact\:javassist\#pom.original\#pom\#-2034113071.exists=true artifact\:ivy\#ivy\#xml\#215145112.location=/data/e/mvn/org/javassist/javassist/3.18.2-GA/javassist-3.18.2-GA.pom artifact\:javassist\#pom.original\#pom\#-2034113071.is-local=true artifact\:ivy\#ivy\#xml\#215145112.exists=true artifact\:ivy\#ivy\#xml\#215145112.is-local=true artifact\:javassist\#bundle\#jar\#-365226054.exists=true artifact\:javassist\#bundle\#jar\#-365226054.is-local=true artifact\:javassist\#bundle\#jar\#-365226054.location=/data/e/mvn/org/javassist/javassist/3.18.2-GA/javassist-3.18.2-GA.jar
表明这里只记录了相应的地址信息,具体信息在编译时会自动从相应地址中进行引用.
转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201508230001.html