1. 程式人生 > >Scala學習筆記(2)——一口氣講完用Itellij(Maven)建工程並打包的事情

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程式建立以及最終打包。