scala + intellij idea 环境搭建及编译、打包

大数据生态圈中风头正旺的Spark项目完全是采用Scala语言开发的,不懂Scala的话,基本上就没法玩下去了。Scala与Java编译后的class均可以运行于JVM之上,就好象.NET中F#与C#的关系。下面进入正题:

1、下载scala sdk

http://www.scala-lang.org/download/ 直接到这里下载sdk,目前最新的稳定版为2.11.7,下载后解压就行

(后面在intellij idea中创建.scala后缀源代码时,ide会智能感知并提示你设置scala sdk,按提示指定sdk目录为解压目录即可)

2、下载scala for intellij idea的插件

如上图,直接在plugins里搜索Scala,然后安装即可,如果不具备上网环境,或网速不给力。也可以直接到http://plugins.jetbrains.com/plugin/?idea&id=1347手动下载插件的zip包,手动下载时,要特别注意版本号,一定要跟本机的intellij idea的版本号匹配,否则下载后无法安装。下载完成后,在上图中,点击“Install plugin from disk...”,选择插件包的zip即可。

3、如何跟maven整合

网上有一堆教程讲idea如何new module或new project一步一步来创建scala工程,在这里我不推荐这个。原因是现在主流的开发环境,大多数是采用maven来构建项目的,所以建议大家用maven+plugin的方式来构建scala应用,另外,就象VB.NET/C#/F#可同时在一个项目中使用,最大限度发挥各语种特长一样,java与可以与scala在一个项目中混合使用。见下面的pom.xml示例:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>yjmyzz</groupId>
 8     <artifactId>MyScala</artifactId>
 9     <version>1.0</version>
10 
11     <dependencies>
12         <dependency>
13             <groupId>org.scala-lang</groupId>
14             <artifactId>scala-library</artifactId>
15             <version>2.11.7</version>
16         </dependency>
17         <dependency>
18             <groupId>org.scala-lang</groupId>
19             <artifactId>scala-compiler</artifactId>
20             <version>2.11.7</version>
21         </dependency>
22         <dependency>
23             <groupId>org.scala-lang</groupId>
24             <artifactId>scala-reflect</artifactId>
25             <version>2.11.7</version>
26         </dependency>
27         <dependency>
28             <groupId>log4j</groupId>
29             <artifactId>log4j</artifactId>
30             <version>1.2.12</version>
31         </dependency>
32         <dependency>
33             <groupId>com.google.collections</groupId>
34             <artifactId>google-collections</artifactId>
35             <version>1.0</version>
36         </dependency>
37     </dependencies>
38 
39     <build>
40         <plugins>
41             <plugin>
42                 <groupId>org.scala-tools</groupId>
43                 <artifactId>maven-scala-plugin</artifactId>
44                 <version>2.15.2</version>
45                 <executions>
46                     <execution>
47                         <goals>
48                             <goal>compile</goal>
49                             <goal>testCompile</goal>
50                         </goals>
51                     </execution>
52                 </executions>
53             </plugin>
54         </plugins>
55     </build>
56 </project>

最下面的plugin是用来编译scala源代码的,毕竟java与scala是二种不同的语言,有各自的sdk和编译器,所以需要专门的maven插件来处理scala的编译。 项目的目录结构,大体跟maven的默认约定一样,只是src下多了一个scala目录,如下图:

这样,java源代码放在/src/java下,scala源代码放在/src/scala下,管理起来也比较清爽,上图中scala下的Hello.scala源代码如下:

package yjmyzz

class Hello {
  def sayHello(x: String): Unit = {
    println("hello," + x);
  }
}

 然后java下的HelloWorld.java里就可以调用scala的Hello类:

package yjmyzz;

public class HelloWorld {

    public static void main(String[] args){
        Hello h = new Hello();
        h.sayHello("scala");
    }
}

4、scala项目maven的编译打包

如果直接运行mvn clean package ,会杯具的发现

[ERROR] /Users/jimmy/Work/IdeaProjects/Default/MyScala/src/main/java/yjmyzz/HelloWorld.java:[7,9] cannot find symbol [ERROR] symbol:   class Hello [ERROR] location: class yjmyzz.HelloWorld

原因是mvn clean package默认只处理java源代码的编译、打包,而不管scala,所以编译时遇到Hello这个由scala语言编写的class,此时scala还没编译生成class,所以找不到相应的调用入口。

解决办法:

mvn clean scala:compile compile package

如上,在compile前加入scala:compile,这是maven-scala-plugin插件提供的选项,表示编译scala,这样一来,先编译scala,再编译java,最后打包,妥妥滴!

最后:gradle环境下,可参考我的另一篇文章gradle项目中如何同时支持java与scala混合使用?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python爬虫基本知识:什么是爬虫?

豌豆贴心提醒,本文阅读时间5分钟 一、网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字。 把互联网比喻成一个蜘蛛网,那么Spider就是...

35360
来自专栏ionic3+

Cordova@6.4.0以上灵活修改配置

还记得我在此文【技巧】ionic3优雅解决启动前、后黑白屏问题中添加了一个勾子插件cordova-custom-config来修改配置的主题。

14140
来自专栏Linux Python 加油站

什么是爬虫?python爬虫基本知识

把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。 网络蜘蛛是通过网页的链接地址来寻找网页的。

17730
来自专栏算法修养

Flask 学习篇二:学习Flask过程中的记录

Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Applicati...

33590
来自专栏AndroidTv

讲讲断点续传那点儿事提问理论基础代码示例

这次想来讲讲断点续传,以前没相关需求,所以一直没去接触,近阶段了解了之后,其实并不复杂,那么也便来写一篇记录一下,分享给大伙,也方便自己后续查阅。

11520
来自专栏JAVA高级架构

一些设计上的基本常识

最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助, 把暂时想到的几条,先记在这里。 1. API与SPI分离 框架或组件通常有两类客户...

12510
来自专栏张善友的专栏

ASP.NET2.0应用中定制安全凭证之实践篇

一、方案架构   本方案架构很简单——它用一个Web服务来包装ASP.NET 2.0提供者并且为远程客户暴露该凭证管理,你甚至还能在该架构中加上一些失去的功能。...

20280
来自专栏知识分享

二,ESP8266 GPIO和SPI和定时器和串口(基于Lua脚本语言)

我们写lua用这个软件 http://pan.baidu.com/s/1kVN09cr 密码:pfv7 ? 如果点击的时候提示安装,,安装就行,,如果没有提示呢...

32240
来自专栏数据之美

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应...

1.3K70
来自专栏用户2442861的专栏

使用 libevent 和 libev 提高网络应用性能——I/O模型演进变化史

http://blog.csdn.net/hguisu/article/details/38638183(牛逼100多名)

29410

扫码关注云+社区

领取腾讯云代金券