非Springboot项目打包,将自己的程序和依赖打成一个jar包
前言
即使在pom.xml文件中没有配置任何plugin,maven也会默认设置一些插件,如其中的maven-jar-plugin插件
执行 package 打包时,maven 会使用maven-jar-plugin插件打包,这种方式打的包中只含有自己写的程序和资源文件,不包含程序依赖的其他jar包,而且在META-INF/MANIFEST.MF
文件中没有配置Main-class属性值
mavencompilerplugin_7">maven-compiler-plugin
负责编译源码,可指定编译的jdk版本
mavenresourceplugin_9">maven-resource-plugin
复制资源文件到指定的目录中(如输出目录中),默认是打包jar包中。例如我们希望在打包时,将配置文件放到jar包外部,这样在修改配置文件时,就不用再重新打包了
mavenjarplugin_11">maven-jar-plugin
将项目的类文件和资源文件打成一个jar包,该jar包中不包含依赖的jar包
- pom.xml文件配置
<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><excludes><exclude>app.properties</exclude></excludes><archive><!-- 控制MANIFESF.MF文件中的信息 --><manifest><addClasspath>true</addClasspath><classpathPrefix>libs/</classpathPrefix><mainClass>com.xxx.Application</mainClass> <!-- 主类全路径名 --></manifest></archive></configuration></plugin>
mavendependencyplugin_35">maven-dependency-plugin
复制项目的依赖到指定目录,如lib目录中,配合上述maven-jar-plugin的配置
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!-- 拷贝项目依赖包到lib/目录下 --><outputDirectory>${project.build.directory}/libs</outputDirectory><!-- 间接依赖也拷贝 --><excludeTransitive>false</excludeTransitive><!-- 带上版本号 --><stripVersion>false</stripVersion></configuration></execution></executions></plugin>
- 执行package
mavenassemblyplugin_63">maven-assembly-plugin
更丰富的定制化打包方式。可将本身的程序和所有的依赖打成一个jar包
- pom.xml文件配置
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><!--主类全路径名--><mainClass>com.xxx.Main</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
- 执行打包
- 结果
执行打包后,在target目录下会生成两个jar包,第一个jar包只包含自己写的程序,第二个jar包不仅包含自己写的程序,还有程序需要的依赖
扩展
若需要更多自定义打包配置,可搭配assembly.xml文件