分享

Scala程序编译运行

 gearss 2017-01-13

1.编译

Scala演示代码如下:
  1. <pre name="code" class="plain">/**  
  2. * @author Administrator  
  3. */  
  4. object Maps {  
  5.   
  6. val colors = Map("red" -> 0xFF0000,  
  7. "turquoise" -> 0x00FFFF,  
  8. "black" -> 0x000000,  
  9. "orange" -> 0xFF8040,  
  10. "brown" -> 0x804000)  
  11.   
  12. def main(args: Array[String]){  
  13. for(name <- args)println(  
  14. colors.get(name) match{  
  15. case Some(code) =>   
  16. name + " has code: " + code  
  17. case None =>  
  18. "Unknown color: " + name  
  19. })  
  20. }  
  21. }  

1.1方式一scalac

使用Scala的基本编译器——scalac。开始编译源文件,但在编译完成之前会有几秒的停顿。因为每次编译器启动时,都要花一些时间扫描jar文件内容,并且在开始编译提交的源文件之前完成更多其他初始化工作(因此可能比Java程序编译慢)。命令如下:
[plain] view plain copy
  1. scalac -d class/ Maps.scala  

1.2方式二fsc

Scala的发布包里还包括了一个叫做fsc(快速Scala编译器,Fast Scala Compiler)的Scala编译器后台服务(daemon)。估计是针对Scala程序编译慢才刻意提供的服务。使用方法如下(其实用法和scalac差不多):
[plain] view plain copy
  1. fsc -d class/ Maps.scala  


第一次执行fsc时,会创建一个绑定在计算机端口上的本地服务器后台进程。然后它就会把文件列表通过端口发送给后台进程,由后台进程编译。下一次执行fsc时,检测到后台进程已经在运行了,于是fsc将只把文件列表发给后台进程,它会立刻开始编译文件。使用fsc,只须在首次运行的时候等待Java运行时环境的启动。如果想停止fsc后台进程,可以执行命令:

[plain] view plain copy
  1. fsc -shutdown  

2.打包

打包过程和Java程序打包没什么两样,这里不做累述,仅给出命令行如下:
[plain] view plain copy
  1. jar -cvf maps.jar -C class/ .  


3.运行

3.1方式一java

使用java方式运行打包好的Scala程序有一个地方特别需要注意。这里,先看按Java程序的方式,不做任何处理运行Scala,命令行如下:
[plain] view plain copy
  1. java -cp maps.jar Maps red blue black orange  


运行结果如下图所示:

报错提示Scala中的方法没有找到,为什么没有找到?这里先声明:该程序在Eclipse for Scala(IDE)上运行是没问题的,所以问题可能出在Scala的jar包没有引入,那么用-D参数引入jar包,命令行如下:
[plain] view plain copy
  1. java -Djava.ext.dirs=$SCALA_CP -cp maps.jar Maps red blue black orange  


注:SCALA_CP=$SCALA_HOME/lib

运行结果如下图所示:


3.2方式二scala

其实可以直接使用scala命令来运行的,不要以为scala命令只能开启Scala命令行模式,闲言少叙,直接看命令行:
[plain] view plain copy
  1. scala -cp maps.jar Maps red blue black orange  


运行结果如下图所示:


4.总结

如果多次编译Scala程序建议使用fsc(每一种事物的存在都有它道理的),如果只须编译一次Scala程序,就用scalac吧,毕竟fsc用完记得关闭;
运行Scala程序建议使用scala命令,不建议用java命令。


参考文献

《Scala编程》

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多