scala中sbt相应安装及配置信息

在使用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

相关文章:

作者: flym

I am flym,the master of the site:)

发表评论

邮箱地址不会被公开。 必填项已用*标注