大數(shù)據(jù)生態(tài)圈中風(fēng)頭正旺的Spark項(xiàng)目完全是采用Scala語言開發(fā)的,不懂Scala的話,基本上就沒法玩下去了。Scala與java編譯后的class均可以運(yùn)行于JVM之上,就好象.NET中F#與C#的關(guān)系。下面進(jìn)入正題:
1、下載scala sdk
http://www.scala-lang.org/download/ 直接到這里下載sdk,目前最新的穩(wěn)定版為2.11.7,下載后解壓就行
(后面在intellij idea中創(chuàng)建.scala后綴源代碼時(shí),ide會智能感知并提示你設(shè)置scala sdk,按提示指定sdk目錄為解壓目錄即可)
2、下載scala for intellij idea的插件
如上圖,直接在plugins里搜索Scala,然后安裝即可,如果不具備上網(wǎng)環(huán)境,或網(wǎng)速不給力。也可以直接到http://plugins.jetbrains.com/plugin/?idea&id=1347手動(dòng)下載插件的zip包,手動(dòng)下載時(shí),要特別注意版本號,一定要跟本機(jī)的intellij idea的版本號匹配,否則下載后無法安裝。下載完成后,在上圖中,點(diǎn)擊“Install plugin from disk...”,選擇插件包的zip即可。
3、如何跟maven整合
網(wǎng)上有一堆教程講idea如何new module或new PRoject一步一步來創(chuàng)建scala工程,在這里我不推薦這個(gè)。原因是現(xiàn)在主流的開發(fā)環(huán)境,大多數(shù)是采用maven來構(gòu)建項(xiàng)目的,所以建議大家用maven+plugin的方式來構(gòu)建scala應(yīng)用,另外,就象VB.NET/C#/F#可同時(shí)在一個(gè)項(xiàng)目中使用,最大限度發(fā)揮各語種特長一樣,java與可以與scala在一個(gè)項(xiàng)目中混合使用。見下面的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的編譯。項(xiàng)目的目錄結(jié)構(gòu),大體跟maven的默認(rèn)約定一樣,只是src下多了一個(gè)scala目錄,如下圖:
這樣,java源代碼放在/src/java下,scala源代碼放在/src/scala下,管理起來也比較清爽,上圖中scala下的Hello.scala源代碼如下:
1234567 | package yjmyzz class Hello { def sayHello(x : String) : Unit = { println( "hello," + x); } } |
然后java下的HelloWorld.java里就可以調(diào)用scala的Hello類:
123456789 | package yjmyzz; public class HelloWorld { public static void main(String[] args){ Hello h = new Hello(); h.sayHello( "scala" ); } } |
4、scala項(xiàng)目maven的編譯打包
如果直接運(yùn)行mvn clean package ,會杯具的發(fā)現(xiàn)
[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默認(rèn)只處理java源代碼的編譯、打包,而不管scala,所以編譯時(shí)遇到Hello這個(gè)由scala語言編寫的class,此時(shí)scala還沒編譯生成class,所以找不到相應(yīng)的調(diào)用入口。
解決辦法:
mvn clean scala:compile compile package
如上,在compile前加入scala:compile,這是maven-scala-plugin插件提供的選項(xiàng),表示編譯scala,這樣一來,先編譯scala,再編譯java,最后打包,妥妥滴!
最后:gradle環(huán)境下,可參考我的另一篇文章gradle項(xiàng)目中如何同時(shí)支持java與scala混合使用?
新聞熱點(diǎn)
疑難解答