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。
3,前文已经提到目前还不能直接从已有的scala源代码文件目录中导入再创建项目,即通过Import Project的方式,只能直接使用Create New Project的方式来做。
顺便提一下,如何删除IDEA的recent project:只要在welcome界面,鼠标移到一个项目上,然后按键盘上的Delete键,是的,IDEA没有设计右键菜单来删除,直接操作键盘。
OK,接下去:
创建一个Scala Module,就是Scala项目。注意,那个no /doc/scala-devel-docs/api,不用管;勾选最下面的Enable type-aware highlighting(查阅IDEA scala plugin的博客看解释)。Finish之后,一个Scala项目就建立好了,但是没有任何源代码。
最近的发现是,如果HelloScala目录已经存在,而且其中含有Scala代码,那么就可以变相导入了。
另外,如果已经设置了Global Libraries,当再次创建一个项目时,这里的界面会有变化:
上图红框中的内容就是设置了Global Libraries后的情况,IntelliJ会自动选择Global中的设置。下面会提到设置Global的方法。
选择HelloScala,然后F4,打开Project Structure,
可见2个错误,可以直接忽略它们。可以在这里把Project Libraries移到Global LIbraries,这样所有项目都可以共享:
完成后,如下所示:
OK,退出。看IDEA的右下角:
那个[T],就是用来type-aware highlighting的。上图是打开状态。
按快捷键Ctrl+Alt+s,打开settings,过滤scala的内容,可以看到scala相关的设置,注意到Compiler->Scala Compiler下的内容为空,因为现在开始使用External Compiler了,在最下面的Scala中有external compiler的配置:
其它的暂时不管。这个External Compiler的作用就是说它是一个独立的进程,启动后独立存在,就算IDEA关闭了,它也可以独立存在,替代以前的FSC快速编译。
4,下面,加入Scala源代码。
在src上右击,选择Scala Class:
输入Class name,并选择Object,建立一个简单的Scala object程序。也可以在Name中同时创建包,输入main.scala.HelloScala,或者scala.HelloScala,自己看下什么效果。
在建立好的object HelloScala中,输入"mai",然后按下Ctrl+J,出现Live Template,回车确定,就会自动插入代码 :
最后补上代码:
也可以用方法补全的方式:输入"println",然后Ctrl + Alt + Space,弹出方法补全的窗口。
提醒一句,不要顺手再输入一个分号哦,在函数式编程的概念中,是表达式,不是语句。(虽然Scala也可以认分号的,这是因为Scala同时也支持命令式编程)
5,编译。Ctrl + f9。看下什么是external compiler。
注意status bar上的那个icon,显示和控制Scala compiler的状态。同时Event log中显示在TCP 3200上建立了server。查看下进程:
可以看到有一个Java进程在运行了。
6,Debug。这里需要用SBT。
1)加一个断点,然后开始debug configuration。
点击+,选择Remote,创建一个Remote debug。
命名,然后点击copy的那个button,把"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"拷贝下来。OK退出。 然后Ctrl+ Alt + s,打开settings, 输入sbt:
将拷贝的内容贴到SBT的VM parameters中,如上图选中的部分。OK 退出 。看到debug configuration已经变成刚才增加的那个了。
此时,点击右侧的debug按钮,哈,肯定会出错:
这是因为SBT并没有启动。注意到那个SBT Console了吗,点击它:
它并没有运行,点击那个run按钮,开始运行。初次运行会联网下载,所以请保持在线:
等待完成后:
会出现SBT的命令提示符">",此时IntelliJ IDEA的sbt插件的初次运行初始化就完成了。这里实际就是开启了一个SBT的交互式命令控制台,同时经过我们上面的设置,给它开了一个Remtoe debug的端口5005。现在有2个Java的进程在跑,分别代表external compiler server、sbt server。
现在就可以正常debug了:
最下面status bar上的错误信息,还是刚才的哦,是event log中最近的一条,不要误会有问题。
但是,好像断点还是没跑到,这是为什么个?!使用过gdb吗,要run起来!从哪里?进SBT console,run。
Oops,还是出错了:
崩溃~大脑休克~。冷静... No main class detected。说明没有main啊。原来SBT有自己默认的项目文件结构,要在src/main/scala/下创建scala源代码才可以。
注意到src/main/scala/Hello.Scala中,断点的图示有了变化。
这下可以了。下面,就可以调式了。这里简单f9,让它跑完。
那么,有没有办法改变这个默认的项目结构呢?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也放在其中:
如上图所示。在我的电脑中,已经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开发的构建。
返回索引