Idea下使用maven打包可执行jar包并小案例演示

浏览: 4572

这一阵子在学习spark,有些本地执行不了,需要到集群上才能执行,奈何打包后的jar包放到集群上跑后一直找不到主类,折腾了好一会才搞出来,所以来此记录一下,重新配置时可以来copy。

关键还是在pom.xml的插件这里,java版本和scala版本的又有所不同。至于如何创建Maven项目,在此就不多写了,百度很多。

pom.xml插件配置

java:

<build>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test</testSourceDirectory>

<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass></mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<includeProjectDependencies>true</includeProjectDependencies>
<includePluginDependencies>false</includePluginDependencies>
<classpathScope>compile</classpathScope>
<mainClass>cn.spark.sparktest.App</mainClass>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

</plugins>
</build>

scala:

<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/</testSourceDirectory>
<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></mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

编写scala案例

配置完pom.xml后,等待依赖包和插件下载完成,写一段代码来测试下

package cn.spark.study.sql

import org.apache.spark.sql.SparkSession

object GenericLoadSave {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.config("spark.testing.memory", "471859200").appName("GenericLoadSave").getOrCreate()
val userDF = spark.read.load("hdfs://spark1:9000/users.parquet")
userDF.printSchema()
userDF.show()
userDF.select("name","favorite_color").write.json("hdfs://spark1:9000/nameAndColors_scala")
}

}

以上代码表示读取hdfs文件系统里根目录下的users.parquet文件,打印其结构和内容,并选取name和favorite_color列以json格式保存到/nameAndColors_scala目录下

打包步骤

1.点击右侧的Maven Project,右键点击clean,左键点击Run Maven Build(见下图)。这一步是清理原先有执行过的结果。如果这一步没报错,接着下一步。如果有报错,见错误再修改(我没报错,所以不清楚有什么错误)

Clipboard Image.png

2.右键点击install,右键点击Run "项目名称"[install],等待打包完成

Clipboard Image.png

3.打包完成后,项目目录下会生成一个target的目录,该目录下的jar文件就是所需要的可执行jar文件。

Clipboard Image.png

测试结果

未执行jar文件前,文件系统根目录下的文件有:

Clipboard Image.png

将study-spark-scala-1.0-SNAPSHOT.jar上传到/opt目录下

写sh脚本,通过spark-submit命令执行

Clipboard Image.png

执行该sh脚本,printSchema()和show()方法运行结果:

Clipboard Image.png

根目录下已经有nameAndColors_scala目录及子文件了

Clipboard Image.png

查看json文件:

Clipboard Image.png

测试完毕,结果与预想中的一样,OK。

推荐 3
本文由 _缘君_ 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

最近开始学spark了呀,
工作要求,必须学

要回复文章请先登录注册