maven将所有依赖和scala源码编译后的结果打包成一个jar
参考网址
https://www.jianshu.com/p/dcfdbccdd219
https://blog.csdn.net/u014163312/article/details/127330574
https://blog.csdn.net/u014163312/article/details/104854590
如果不修改maven的配置文件,无法将用到的依赖打包到jar包里,每次在服务器上运行jar包都需要下载。
通过maven-jar-plugin方式打包成可执行jar文件,但是这种方式会将所有依赖(包括外部依赖)单独打包到另外一个指定文件夹下,需要通过指定Class-Path的方式关联
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>当前maven-dependency-plugin版本号</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
在pom文件中添加
<build>
<plugins>
<!--打包成一个jar的plugin-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<!--运行jar包时运行的主类,要求类全名-->
<mainClass>cn.ac.iie.DataAnalysis</mainClass>
<!-- 是否指定项目classpath下的依赖 -->
<addClasspath>true</addClasspath>
<!-- 指定依赖的时候声明前缀 -->
<classpathPrefix>./lib/</classpathPrefix>
<!--依赖是否使用带有时间戳的唯一版本号,如:xxx-1.3.0-20121225.012733.jar-->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
<!--把当前项目所有的依赖打包到target目录下的lib文件夹下-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!--已存在的Release版本不重复copy-->
<overWriteReleases>false</overWriteReleases>
<!--已存在的SnapShot版本不重复copy-->
<overWriteSnapshots>false</overWriteSnapshots>
<!--不存在或者有更新版本的依赖才copy-->
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
此后 view--tool windows--maven--package 打包

在target目录下:可以运行scala程序编译打包好的jar包(Spark-5GCData...-1.0-SNAP...),其中lib中包含了程序需要的所有依赖的jar包


上述方法无法将整个工程打成一个可执行jar包,
如果想将工程打包成一个包含所有的依赖的可执行jar包
需要通过maven-assembly-plugin
插件来打包,可以实现该需求。
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>cn.ac.iie.DataAnalysis</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
注意:要添加<groupId>org.apache.maven.plugins</groupId>(因为本地仓库中的文件夹目录结构:setting文件中指定的本机的maven-repository\org\apache\maven\plugins\maven-assembly-plugin\3.4.0)
在项目文件夹的路径处输入cmd
先输入mvn clean清空之前打包的项目jar包(重要!)
使用mvn assembly:assembly -Dmaven.test.skip打包
如果打包的时候报错:Could not find goal ‘assembly’ in plugin org.apache.maven.plugins:maven-assembly-plugin: among available goals help, single
点击maven的plugin -- assembly:single打包即可,无需使用命令行

打包包含依赖的jar成功!!!如下
