mvn clean package打包maven-archetype-webapp项目时,打包后的jar包含项目中引用的jar包(解压后,在WEB-INF有一个lib目录,该目录下有所有依赖包)。
mvn clean package打包maven-archetype-quickstart项目时,打包后的jar为什么不包含项目中引用的jar包呢?这样就会导致,spark-submit运行spark应用时会报各种jar包找不到,还必须得人为地把依赖jar全部丢到${SPARK_HOME}/jars目录中,这显然是不可接受的。
解决方案是:
在pom.xml文件中添加一个名为assembly的maven jar,如下
<build>
<finalName>sparkTestNew</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
然后,不再用mvn clean package打jar包,采用命令:mvn assembly:assembly。在target目录中有一个后缀是jar-with-dependencies的jar,这个jar包含依赖的jar包(class文件),spark-submit使用这个jar就行了。