欢迎光临散文网 会员登陆 & 注册

maven将所有依赖和scala源码编译后的结果打包成一个jar

2023-02-16 11:37 作者:九条千棘  | 我要投稿

参考网址 

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成功!!!如下


maven将所有依赖和scala源码编译后的结果打包成一个jar的评论 (共 条)

分享到微博请遵守国家法律