Windows下Scala编程环境的构建:使用IntelliJ IDEA Community

概述


    上一篇介绍了使用SBT管理Scala项目,本文则开始图文介绍GUI IDE环境下的配置。

    Console下管理项目与GUI IDE管理,其实各有各的用途。前者适合做一些自动化的构建,无需人工干预;后者更适合实际的开发,比如Debug,前者没有后者好用。不过GUI IDE实际也是在调用前者,可以看作是对前者的一种GUI的封装。做开发应该2个路线都熟悉。

    本文使用IntelliJ IDEA Community的版本,本系列中都简称为IDEA。

开始


    1,安装IntelliJ IDEA Community,最新的是12.0.x的版本。

    2,安装sbt和scala的plugins。

clipboard

    3,前文已经提到目前还不能直接从已有的scala源代码文件目录中导入再创建项目,即通过Import Project的方式,只能直接使用Create New Project的方式来做。

clipboard[1]

    顺便提一下,如何删除IDEA的recent project:只要在welcome界面,鼠标移到一个项目上,然后按键盘上的Delete键,是的,IDEA没有设计右键菜单来删除,直接操作键盘。

clipboard[2]

    OK,接下去:

clipboard[3]

    创建一个Scala Module,就是Scala项目。注意,那个no /doc/scala-devel-docs/api,不用管;勾选最下面的Enable type-aware highlighting(查阅IDEA scala plugin的博客看解释)。Finish之后,一个Scala项目就建立好了,但是没有任何源代码。

最近的发现是,如果HelloScala目录已经存在,而且其中含有Scala代码,那么就可以变相导入了。

    另外,如果已经设置了Global Libraries,当再次创建一个项目时,这里的界面会有变化:

clipboard[4]

    上图红框中的内容就是设置了Global Libraries后的情况,IntelliJ会自动选择Global中的设置。下面会提到设置Global的方法。

clipboard[5]

    选择HelloScala,然后F4,打开Project Structure,

clipboard[6]

    可见2个错误,可以直接忽略它们。可以在这里把Project Libraries移到Global LIbraries,这样所有项目都可以共享:

clipboard[7]

    完成后,如下所示:

clipboard[8]

clipboard[9]

clipboard[10]

clipboard[11]

    OK,退出。看IDEA的右下角:

clipboard[12]

    那个[T],就是用来type-aware highlighting的。上图是打开状态。

    按快捷键Ctrl+Alt+s,打开settings,过滤scala的内容,可以看到scala相关的设置,注意到Compiler->Scala Compiler下的内容为空,因为现在开始使用External Compiler了,在最下面的Scala中有external compiler的配置:

clipboard[13]

clipboard[14]

    其它的暂时不管。这个External Compiler的作用就是说它是一个独立的进程,启动后独立存在,就算IDEA关闭了,它也可以独立存在,替代以前的FSC快速编译。

    4,下面,加入Scala源代码。

clipboard[15]

    在src上右击,选择Scala Class:

clipboard[16]

    输入Class name,并选择Object,建立一个简单的Scala object程序。也可以在Name中同时创建包,输入main.scala.HelloScala,或者scala.HelloScala,自己看下什么效果。

clipboard[17]

    在建立好的object HelloScala中,输入"mai",然后按下Ctrl+J,出现Live Template,回车确定,就会自动插入代码 :

clipboard[18]

    最后补上代码:

clipboard[19]

    也可以用方法补全的方式:输入"println",然后Ctrl + Alt + Space,弹出方法补全的窗口。

clipboard[20]

    提醒一句,不要顺手再输入一个分号哦,在函数式编程的概念中,是表达式,不是语句。(虽然Scala也可以认分号的,这是因为Scala同时也支持命令式编程)

    5,编译。Ctrl + f9。看下什么是external compiler。

clipboard[21]

    注意status bar上的那个icon,显示和控制Scala compiler的状态。同时Event log中显示在TCP 3200上建立了server。查看下进程:

clipboard[22]

    可以看到有一个Java进程在运行了。

    6,Debug。这里需要用SBT。

    1)加一个断点,然后开始debug configuration。

clipboard[23]

    点击+,选择Remote,创建一个Remote debug。

clipboard[24]

clipboard[25]

    命名,然后点击copy的那个button,把"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"拷贝下来。OK退出。 然后Ctrl+ Alt + s,打开settings, 输入sbt:

clipboard[26]

    将拷贝的内容贴到SBT的VM parameters中,如上图选中的部分。OK 退出 。看到debug configuration已经变成刚才增加的那个了。

clipboard[27]

    此时,点击右侧的debug按钮,哈,肯定会出错:

clipboard[28]

    这是因为SBT并没有启动。注意到那个SBT Console了吗,点击它:

clipboard[29]

    它并没有运行,点击那个run按钮,开始运行。初次运行会联网下载,所以请保持在线:

clipboard[30]

    等待完成后:

clipboard[31]

    会出现SBT的命令提示符">",此时IntelliJ IDEA的sbt插件的初次运行初始化就完成了。这里实际就是开启了一个SBT的交互式命令控制台,同时经过我们上面的设置,给它开了一个Remtoe debug的端口5005。现在有2个Java的进程在跑,分别代表external compiler server、sbt server。

clipboard[32]

    现在就可以正常debug了:

clipboard[33]

    最下面status bar上的错误信息,还是刚才的哦,是event log中最近的一条,不要误会有问题。

但是,好像断点还是没跑到,这是为什么个?!使用过gdb吗,要run起来!从哪里?进SBT console,run。

    Oops,还是出错了:

clipboard[34]

    崩溃~大脑休克~。冷静... No main class detected。说明没有main啊。原来SBT有自己默认的项目文件结构,要在src/main/scala/下创建scala源代码才可以。

clipboard[35]

clipboard[36]

    注意到src/main/scala/Hello.Scala中,断点的图示有了变化。

clipboard[37]

    这下可以了。下面,就可以调式了。这里简单f9,让它跑完。

clipboard[38]

    那么,有没有办法改变这个默认的项目结构呢?SBT提供了相关的办法,这里不再详述。


    7,一个尾巴。注意到初次启动sbt时,会下载0.12.0-RC4。注意到上一篇介绍SBT的文章中,分析到初次运行时,会获取0.12.2,那么

    1)为什么IDEA中的sbt会下载0.12.0-RC4,而不是0.12.2呢?

    2)IDEA的SBT下载的0.1.20-RC4是放在什么地方的呢?

    首先,上一篇中的SBT和本文的IDEA中的SBT是不同的(在IDEA的settings中默认使用bundled SBT,而不是单独下载的sbt版本)。

    上一篇中,提到sbt的配置文件,在build.properties中指明了sbt的版本,而在本文中一切使用的都IDEA SBT默认的配置。那么其实在本文的示例中,也可以建立那些SBT配置文件,这样就不会是0.12.0-RC4了。

    上一篇说到这些下载的文件是放到用户默认路径下的".sbt"文件中,默认就是C:\Documents and Settings\USER-NAME下。或者说IDEA的配置目录".IdeaIC12"在哪里,.sbt就在哪里。IDEA SBT获取的0.12.0-RC4也放在其中:

clipboard[39]

    如上图所示。在我的电脑中,已经Windows用户路径修改到了e:\leo.cao下,所以".sbt"放在那里。(BTW,怎么修改的?只要修改我的文档的默认路径即可)

总结


    1,在IDEA中只能创建Scala项目,无法从源代码中导入而创建。

    2,要使用Remote Debug的方式调试Scala程序,同时要配置IDEA SBT plugin的VM parameters。

    3,IDEA 12 Scala Plugin开始使用External Compiler的方式。启动后,注意有一个独立的Java进程在跑。

    4,在开始Debug前,需要先启动sbt。初次启动,需要联网。这样也会有一个独立的Java进程在跑。

    5,项目的文件结构,要按照SBT的默认结构来创建,否则需要自己定义SBT的配置文件才能运行。

    6,实际Debug时,还要通过SBT Console,通过把程序run起来,来触发断点。

    7,本文所示项目的源代码:gitcafe: https://gitcafe.com/leo.l.cao/HelloScala;bitbucket: https://bitbucket.org/leolcao/helloscala

下一篇,终于开始说明Scala on Android开发的构建。


返回索引

posted @ 2013-03-07 23:59 Leo L.Cao 阅读(...) 评论(...) 编辑 收藏