Scala學習筆記(2)——一口氣講完用Itellij(Maven)建工程並打包的事情
在進行本地Scala環境配置時,需要完成以下幾個步驟:
1、安裝JDK,目前僅支援1.8版本;
2、安裝Scala,並配置對應的環境變數;
3、安裝Spark,並配置對應的環境變數;
4、安裝Intellij,並下載對應的scala plugin。
詳細可見:
https://blog.csdn.net/u011513853/article/details/52865076(Windows)
https://blog.csdn.net/u010171031/article/details/51849562 (Linux:Ubuntu )
在所有的環境變數配置好以後,應當在cmd下(或者Ubuntu的終端下)進行測試:
java -version
scala -version
spark-shell
如果安裝完好的話應當由對應資訊提示
在完成環境配置以後,就可以新建Intellij的project,在此強烈建議使用maven進行任務建立,不推薦sbt或者直接scala格式,主要由於maven是一個非常方便的中央倉庫,第一次使用的時候會覺得有點奇怪,但一旦嘗試成功會發現這是一個非常方便的工具,並且其內建的package程式可以非常方便的用於scala檔案打包。
以下,筆者一步步對工程構建及程式打包進行說明:
1、開啟Intellij,新增project,選擇maven,並點選下一步(暫時不用Create from archetype)
2、填寫GroupId、ArtifactId、Version,這三個都是為了對project進行分類,實際上與Apache專案的建立是類似的,以筆者為例,假設我是大魚公司(bigfish.com),目前要建造一個用於spark機器學習的專案(spark_ml),依次點選下一步即可。
3、右鍵spark_ml,Add FrameWork Support,選擇scala,也就是把scala增加到了專案中
4、增加scala的libraries:點選File ,Project Structure,將Global libraries中的scala sdk複製到上面的libraries,這些工作都是為了使得intellij能夠作為scala的編輯器,並且能夠新增scala 的class檔案,因為intellij最初是預設用於java的
5、在src的main檔案下新增scala資料夾(Mark as Sources Root),test下新增scala檔案(Mark as Test Root),新增的scala檔案就放在main下面的scala資料夾中
6、在src/main/scala下新增scala class,並選擇為Object,本處起名叫HelloSpark
7、在HelloSpark下加入以下內容,這已經是一個完整的scala物件,run以後會打印出“Hello Spark”
object HelloSpark {
def main(args:Array[String]):Unit= {
println("Hello Spark")
}
}
8、接下來就可以嘗試打包了,此時能夠打包,但是打包以後的jar檔案在執行後會提示沒有主類,主要是由於maven的打包檔案還未配置好,在pom.xml檔案中增加以下內容,這個主要用於使得maven的打包程式有效,需要注意這一句(<mainClass>HelloSpark</mainClass> <!--main方法-->),不同的project需要修改對應的mainClass
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.version>2.11.8</scala.version>
<scala.compat.version>2.11</scala.compat.version>
</properties>
<build>
<!--scala待編譯的檔案目錄-->
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<!--scala外掛-->
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<args>
<!--<arg>-make:transitive</arg>--><!--scala2.11 netbean不支援這個引數-->
<arg>-dependencyfile</arg>
<arg>${project.build.directory}/.scala_dependencies</arg>
</args>
</configuration>
</execution>
</executions>
</plugin>
<!--manven打包外掛-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>HelloSpark</mainClass> <!--main方法-->
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
</dependencies>
9、使用maven的工具進行打包,點選package即可,一切順利的話會在target資料夾內生成兩個jar檔案,一個是未處理的,一個是增加了依賴包等最終得到的jar檔案
10、測試jar檔案的有效性:通過cmd進入target資料夾,並輸入 java -jar spark_ml-1.0-0.jar,一切順利的話會輸出 Hello Lorry,由打包依賴可知必須要有scala的外掛與maven的外掛,並且在最終打包結果中會輸出一個處理後的jar包和處理之前的jar包,筆者用同樣的做法測試了spark的wordcount等程式,結果是一樣的,只要在進行maven依賴設定時注意相關事項,就能比較方便的使用該軟體進行scala程式建立以及最終打包。