maven打包插件(maven项目打成可执行的jar包)
前言
现在开发基本都是使用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环境自带的内置变量。
最后打包之后就是这样的。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</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>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
<mainClass>com.xx.base.Syn</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
方式二
maven-assembly-plugin
插件直接把所有的jar包解压之后打成一个大的jar包,但是这样可能会存在类冲突,小项目还能玩玩,大项目估计不行,虽然可以通过排除的方式剔除相关的class文件,但是总感觉很麻烦,可以试试。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xx.base.Syn</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
打成jar包之后是这样的,所有依赖包的class文件都被解压放到一起了
方式三
maven-shade-plugin
这个插件和第二个插件感觉没啥两样。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!--指定main方法-->
<mainClass>com.xx.base.Syn</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
总结
试下来感觉方法一比较好。
还没有评论,来说两句吧...