Windows下使用SBT构建Scala程序

上一篇简单介绍了学习Scala编程入手时的环境构建,本文专门说明下专为Scala而生的一个Build tool的用法。

SBT, 做为一种build tool,相对于Make,Ant,Maven等来说,算是新鲜事物了。虽然它主要是配合Scala而使用,不过它的功能还是比较全面的,所以它的名称不 是Scala Build Tool,而是Simple Build Tool,即它的目标是做为一种通用的build tool。虽然名字里有Simple,其实它一点也不简单。

相关信息参见: http://www.scala-sbt.org/release/tutorial/zh-cn/index.html  里面有详细的介绍, 本文是从网络搜集的一些介绍供参考。

http://www.scala-sbt.org/0.13/tutorial/zh-cn/Basic-Def.html  介绍sbt的使用方法等

不过SBT毕竟属于小众的tool,本文并不打算事无巨细的说明它的全部用法。本文可以看作是对它的官网的阅读导引和注解,以及它的简单用法、还有与后文相关的内容。

本文以及本系列其他文中,SBT和sbt混用。

开始


1,访问https://github.com/sbt/sbt    这是主站,访问下方的README.md,按照Setup中的说明,可以了解从安装到使用的完整用法。应该先大致浏览一遍。入手使用,本文后面会介绍。

不过我觉得这里才是大纲。进入Setup的页面后,点击右上的Documentation或者Contents进入。

clipboard[1]

下图红色框中的内容,讲到了SBT的core concepts。

clipboard[2]

通览之后,会发现SBT可以用Scala语言来编写项目管理的配置文件!这个我觉得可以为做为Scala也是一种适合DSL语言的佐证了。

2,获取MSI版本安装。本文使用0.12.2。

clipboard[3]

再次检查环境变量的配置。MSI安装应该已经把SBT目录加入Path,上图是我自己的配置。

3,开启cygwin,在上篇的示例目录下直接运行sbt,进入它的交互运行方式:

clipboard[4]

也可以在shell下可以直接运行sbt compile/run/clean 等命令,是等价的。

clipboard[5]

运行完sbt的命令,就会多出来一个target字目录,其中有生成的class文件,其内容较多,这里不再说明。

要 注意一点的是,上图不是首次运行sbt时的demo。初次运行,会自动下载和配置一些内容,所以要保证联网。在Windows XP下,默认是会在C:\Documents and Settings\YOUR_NAME\下生成一个.sbt和一个.ivy目录,当然也可以自己修改。当再次运行sbt,就如上图所示了。若你删除 了".sbt"和".ivy",再次运行sbt,就会重新生成。

可见,SBT在使用上可以很简单,只要安装和配置好路径,在写有Scala代码的目录下,就可以直接运行看结果了。这种方式还是主要针对初学阶段的练手,若做一个真正完整的项目,还应该按照更加正规的做法。

为什么要说明下SBT的基本用法,因为后面说明IntelliJ IDEA下的配置时,会用到SBT。

4,根据SBT的文档,建立项目文件结构:(此小节开始的内容是独立的,后面只是说明下,实际不大会用到。)

clipboard[6]

其中必须有一个子目录被命名为“project”,build.properties和plugins.sbt要放在其中,所以这个子目录可以理解为存放于项目管理相关的配置文件用的。另外,sbt的配置文件中二行之间要空一行的,上面提到sbt的配置文件也可以用scala语言来写,但这种配置文件没有必须空一行的要求。

这里我们关注那个plugins.sbt。其中我加了2个plugins: sbt-android-pluginsbt-idea。它们的官方网是:

https://github.com/jberkel/android-plugin

https://github.com/mpeltonen/sbt-idea

是怎么知道它们的呢?线索来自google,查找“scala on android”可以查到下面的一些链接:

http://stackoverflow.com/questions/4433388/intellij-idea-android-scala-application

http://nevercertain.com/2011/02/03/scala-android-intellij-win-part-1-prerequisites.html

http://nevercertain.com/2011/02/03/scala-android-intellij-win-part-2-simple-build-tool.html

http://nevercertain.com/2011/02/18/scala-android-intellij-win-part-3.html

在第一个stackoverflow中,可知一些线索。然后是比较全面的3篇博文,介绍scala on android的配置。

不过,遗憾的是,内容已经不够新了。其中提到的sbt-android-plugin中的create_project,在它最新的版本中已经不存在了,只有0.5.1(含)之前的tag中才能找到。

sbt-android-plugin的作用是为sbt提供一些可以操作android的命令的命令,包括创建android项目、启动android emulator、打包等等。

在最新的说明中,开始使用g8等工具创建android项目。我在windows下配置失败。参考链接:

https://github.com/jberkel/android-plugin/wiki/Projects-using-sbt-android-plugin

其中是一些使用了这个插件的项目,可以参考下那个Android scala installer项目的源代码,看看实际使用sbt管理的项目结构和配置文件是怎样的。

而sbt-idea的作用是为sbt提供创建IDEA项目文件的命令,用来创建IDEA的项目文件,然后可以用IDEA直接打开一个已存在的IDEA项目。实践证明,若项目中只有scala源代码,IDEA(12.0)是无法通过扫描源代码来创建scala项目的,这说明现在IDEA的scala插件还不支持

clipboard[7]

clipboard[8]

上2张图演示了下这个插件的使用,中间省略了一些内容。和上面运行之前的目录结构相比,多出了一些目录,还有很多的文件,这里不用细说。

其实对于sbt-android-plugin,还有一个替代者:sbt-android-sdk-plugin,官网是:

https://github.com/pfn/android-sdk-plugin

其中也有说明它跟sbt-android-plugin的比较。其用法,也是在plugins.sbt中增加一些内容,然后需要联网下载使用。

5,接下来,就有了一些问题:

1)为什么不用android自带的工具来创建android项目呢?要用sbt的插件?

2)就算IDEA无法直接导入已存在的源代码,为什么不用IDEA直接创建Scala项目呢?sbt-idea插件创建的IDEA项目文件也不一定更跟得上IDEA的更新。

我觉得这些插件存在的意义,是在sbt这个框架下。显然,使用Android自带的工具以及直接使用IDE导入/创建,要比这些插件更有保证。其实更进一步说,我们后面没有必要直接使用SBT这个工具。

既然实际用不上,为何本文还要说明下呢?因为在IDEA中,还是有赖于它的,后面关于使用IDEA的文章中会看到,所以做为后文的一个基础,才有了本文。

原创:曹磊(Leo Cao) Email: leo.l.cao@gmail.com。若转载,请标明出处。

http://www.cnblogs.com/leolcao/archive/2013/03/07/2949044.html

发表评论