maven打包插件(maven项目打成可执行的jar包)

快来打我* 2023-02-28 11:20 181阅读 0赞

前言

现在开发基本都是使用springboot项目,打包直接使用springboot自带的插件就可以了,有时候需要打普通的maven项目,默认package命令打成的jar包只包含项目的class文件,不包括其他依赖的jar包,因为需要通过第三方插件来完成带依赖包的可执行的jar包。

参考链接

Maven构建可执行的jar包(包含依赖jar包)之maven-assembly-plugin介绍
maven打包常用的几个插件

方式一

通过maven-dependency-plugin插件和maven-jar-plugin来组合,maven-jar-plugin其实是maven项目自带的,在pom文件里面不依赖也是可以的,但是我需要修改一些其他属性,比如把lib添加到addClasspath下面,classpathPrefix设置前缀,mainClass方法指定运行的主方法,这样打包之后在jar里面的MANIFEST.MF里面就会有自动把lib包下面的依赖包自动添加进去,然后把可执行的jar包和lib文件夹放在同一个目录下面就可以自动读取到lib里面的jar包了,要想在同目录下面生成lib目录,就需要依靠第二个插件maven-dependency-plugin,这个插件就是把maven项目在pom文件里面依赖的jar包全部放到指定的目录下面去,比如这里的例子就是把依赖包全部输出到${project.build.directory}/lib,其中的${project.build.directory}是maven环境自带的内置变量。
在这里插入图片描述
最后打包之后就是这样的。
在这里插入图片描述

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-dependency-plugin</artifactId>
  4. <version>2.10</version>
  5. <executions>
  6. <execution>
  7. <id>copy-dependencies</id>
  8. <phase>package</phase>
  9. <goals>
  10. <goal>copy-dependencies</goal>
  11. </goals>
  12. <configuration>
  13. <outputDirectory>${project.build.directory}/lib</outputDirectory>
  14. </configuration>
  15. </execution>
  16. </executions>
  17. </plugin>
  18. <plugin>
  19. <groupId>org.apache.maven.plugins</groupId>
  20. <artifactId>maven-jar-plugin</artifactId>
  21. <version>2.4</version>
  22. <configuration>
  23. <archive>
  24. <manifest>
  25. <addClasspath>true</addClasspath>
  26. <classpathPrefix>lib</classpathPrefix>
  27. <mainClass>com.xx.base.Syn</mainClass>
  28. </manifest>
  29. </archive>
  30. </configuration>
  31. </plugin>

方式二

maven-assembly-plugin插件直接把所有的jar包解压之后打成一个大的jar包,但是这样可能会存在类冲突,小项目还能玩玩,大项目估计不行,虽然可以通过排除的方式剔除相关的class文件,但是总感觉很麻烦,可以试试。

  1. <plugin>
  2. <artifactId>maven-assembly-plugin</artifactId>
  3. <version>3.1.0</version>
  4. <configuration>
  5. <archive>
  6. <manifest>
  7. <mainClass>com.xx.base.Syn</mainClass>
  8. </manifest>
  9. </archive>
  10. <descriptorRefs>
  11. <descriptorRef>jar-with-dependencies</descriptorRef>
  12. </descriptorRefs>
  13. </configuration>
  14. <executions>
  15. <execution>
  16. <id>make-assembly</id>
  17. <phase>package</phase>
  18. <goals>
  19. <goal>single</goal>
  20. </goals>
  21. </execution>
  22. </executions>
  23. </plugin>

打成jar包之后是这样的,所有依赖包的class文件都被解压放到一起了
在这里插入图片描述

方式三

maven-shade-plugin这个插件和第二个插件感觉没啥两样。

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-shade-plugin</artifactId>
  4. <version>2.3</version>
  5. <executions>
  6. <execution>
  7. <phase>package</phase>
  8. <goals>
  9. <goal>shade</goal>
  10. </goals>
  11. <configuration>
  12. <transformers>
  13. <transformer
  14. implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  15. <!--指定main方法-->
  16. <mainClass>com.xx.base.Syn</mainClass>
  17. </transformer>
  18. </transformers>
  19. </configuration>
  20. </execution>
  21. </executions>
  22. </plugin>

总结

试下来感觉方法一比较好。

发表评论

表情:
评论列表 (有 0 条评论,181人围观)

还没有评论,来说两句吧...

相关阅读