Scala的正确打开姿势--搭建开发环境

背景

工欲善其事, 必先利其器; 笔者习惯将所有用到的东西掌控在自己可控的范围内, 清晰每个流程, 以便发生问题的时候有思路并能快速响应得出解决方案.

比如默认安装的scala和SBT, 执行sbt指令时, 默认会在用户目录下生成.ivy文件, 该文件夹中存储从远程仓库中下载的构件; 笔者不喜欢该方式, 需要控制配置,启动参数和相关仓库地址.

安装

前提条件: 必须安装JDK, 若scala>=2.12.0, 则JDK>=1.8

  • scala 开发包: scala语言的开发包, 类比于JDK
  • SBT: 全称simple build tool, 对于初次接触的同学来说, 其实并不简单; 一种构建工具, 类比于Maven

安装Scala开发包

根据操作系统环境选择合适的开发包.

将开发包下载至自己钟爱的目录并解压,

1
2
cd ~/devTools/
tar -xzvf scala-2.12.2.tgz

安装SBT

将开发包下载至自己钟爱的目录并解压,

1
2
cd ~/devTools/
unzip sbt-1.0.2.zip

配置

配置Scala

配置CLASS_PATH

1
2
3
4
vim ~/.bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
export SCALA_HOME=/Users/ac/devTools/scala-2.12.2
export PATH=$JAVA_HOME/bin:$SCALA_HOME/bin:$SBT_HOME/bin:$PATH

配置SBT

配置CLASS_PATH

1
2
3
vim ~/.bash_profile
export SBT_HOME=/Users/ac/devTools/sbt
export PATH=$JAVA_HOME/bin:$SCALA_HOME/bin:$SBT_HOME/bin:$PATH

配置依赖库本地仓库, 远程仓库

构建自己依赖库保存目录

1
2
3
4
5
6
cd ~
mkdir sbt-repo
cd sbt-repo
mkdir repo sbt
cd sbt
mkdir boot

配置远程仓库地址

重点: 合理启用关闭其内的地址可大大减少等待时间.

1
2
cd ~/sbt-repo/sbt
vim repositories

内部配置参考如下:

1
2
3
4
5
6
7
8
[repositories]
local-preloaded-ivy: file:////Users/ac/sbt-repo/repo/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
local-preloaded: file:////Users/ac/sbt-repo/repo/
aliyun nexus: http://maven.aliyun.com/nexus/content/groups/public/
# maven-central
typesafe-maven-releases: http://dl.bintray.com/typesafe/maven-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
typesafe-ivy-releases: http://dl.bintray.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sbt-ivy-snapshots: https://dl.bintray.com/sbt/ivy-snapshots/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly

如上配置了各种仓库, 中央库被注释, 若阿里云仓库中没找到需要的构件时, 请开启中央库; 否则下载构件时会一直报错, 且编译无法通过.

配置依赖库本地仓库

Winows 7

进入sbt安装目录下的conf目录, 编辑sbtconfig.txt文件, 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Set the java args to high

-Xmx512M

-XX:MaxPermSize=256m

-XX:ReservedCodeCacheSize=128m



# Set the extra SBT options

-Dsbt.log.format=true
-Dsbt.boot.directory=D:/sbt-repo/sbt/boot
-Dsbt.global.base=D:/sbt-repo/sbt
-Dsbt.ivy.home=D:/sbt-repo/repo
-Dsbt.repository.config=D:/sbt-repo/sbt/conf/repo.properties
-Dsbt.repository.secure=false

Linx或OSX
1
2
cd ~/devTools/sbt/conf
vim sbtopts

按如下配置进行修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# ------------------------------------------------ #
# The SBT Configuration file. #
# ------------------------------------------------ #


# Disable ANSI color codes
#
#-no-colors

# Starts sbt even if the current directory contains no sbt project.
#
-sbt-create

# Path to global settings/plugins directory (default: ~/.sbt)
#
-sbt-dir /Users/ac/sbt-repo/sbt

# Path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
#
-sbt-boot /Users/ac/sbt-repo/sbt/boot

# Path to local Ivy repository (default: ~/.ivy2)
#
-ivy /Users/ac/sbt-repo/repo

# set memory options
#
#-mem <integer>

# Use local caches for projects, no sharing.
#
#-no-share

# Put SBT in offline mode.
#
#-offline

# Sets the SBT version to use.
#-sbt-version 0.11.3

# Scala version (default: latest release)
#
#-scala-home <path>
#-scala-version <version>

# java version (default: java from PATH, currently $(java -version |& grep version))
#
#-java-home <path>

完成本地仓库和远程仓库配置后, 执行sbt命令后:

  1. 下载构件将根据repositories文件中配置的仓库地址尝试下载(找到一个可用的地址, 若所有地址都不存在需要的构件则报错)
  2. 下载时的临时文件信息和下载成功的构件包将存放于sbtopts指定的本地仓库中, 在用户目录下不会再生成.ivy文件夹

测试

打开terminal, 输入scala将进入REPL

1
2
3
4
5
AC-PRO:devTools ac$ scala
Welcome to Scala 2.12.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.

scala>

打开terminal, 输入sbt, 发现会开始下载一些构件, 观察本地仓库, 发现内部多了些目录和文件.

1
2
3
4
5
AC-PRO:sbt ac$ sbt
[warn] No sbt.version set in project/build.properties, base directory: /Users/ac/sbt-repo/sbt
[info] Set current project to sbt (in build file:/Users/ac/sbt-repo/sbt/)
[info] sbt server started at 127.0.0.1:4232
sbt:sbt>

Intellij 配置

首次配置完scala和SBT后, 启Intellij IDEA, 进入Plugins安装如下两个插件:

  • Scala
  • Scalafmt

新建sbt项目, 发现正在下载一些构件(以上不是在执行sbt指令时就下载至本地仓库了?), 这是因为Intellij IDEA未配置远程仓库和本地仓库, 采用了默认配置, 同时可发现用户目录下出现了.ivy文件夹.

修改配置如下:

windows 7

配置路径: Build, Execution, Deployment → Build Tools → SBT

编辑VM parameters如下:

1
2
3
4
5
6
-XX:MaxPermSize=384M
-Dsbt.boot.directory=D:/sbt-repo/sbt/boot
-Dsbt.global.base=D:/sbt-repo/sbt
-Dsbt.ivy.home=D:/sbt-repo/repo
-Dsbt.repository.config=D:/sbt-repo/sbt/conf/repo.properties
-Dsbt.repository.secure=false

OSX

配置路径: Build, Execution, Deployment → Build Tools → SBT

编辑VM parameters如下:

1
2
3
4
5
-XX:MaxPermSize=384M
-Dsbt.boot.directory=/Users/ac/sbt-repo/sbt/boot
-Dsbt.global.base=/Users/ac/sbt-repo/sbt
-Dsbt.ivy.home=/Users/ac/sbt-repo/repo
-Dsbt.repository.config=/Users/ac/sbt-repo/sbt/repositories

删除用户目录下.ivy文件夹, 重启Intellij IDEA, 构件sbt项目, 秒成, 同时用户目录下不再生成.ivy文件夹.

转载

本文出自<<arccode>>, 欢迎转载, 转载请注明出处.