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


 

猜你喜欢

转载自blog.csdn.net/lorrylee1346/article/details/82974612