本文主要是个人使用的几种maven打包的心得
一. maven 打包普通java项目
利用 maven-assembly-plugin 插件以及 maven-compiler-plugin 插件
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>package.class</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> </plugins> </build>
利用上面的代码可以把整个项目打包成可执行jar包(包括项目所需的依赖包)
需要注意的有几点:
1. 有的时候打包会出现编码问题
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\***\target\classes
[WARNING] /D:/***/src/main/java/Test.java:[4,48] 编码GBK的不可映射字符
[WARNING] /D:/***/src/main/java/Test.java:[4,62] 编码GBK的不可映射字符
这是因为编译时的编码问题,解决方法有:
(1)在maven-compiler-plugin插件的configuration中加入<encoding>utf-8</encoding>
(2)pom中加入
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
2. <executions>标签
如果assembly插件中含有如上示例的<executions>标签内容,则直接通过命令 mvn package 即可打包
如果不含有<executions>标签内容,通过命令 mvn package assembly:single 即可打包
3. 打包含有多个main方法的项目
运行时命令由java -jar *.jar 改为 java -cp *.jar 包名.类名(主方法所在的类)
jar命令默认是使用pom中<mainClass>定义的main方法路径,去寻找目录META-INF\MANIFEST.MF文件,在该文件中,有一个叫Main-Class的参数,cp命令可以主动去寻找某个main方法的路径
二. maven打包spring-boot项目
这个主要利用spring-boot提供的maven插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
打包命令很简单 mvn package。需要注意的是通常程序员在写项目时会建立一些test 文件,里面存放了对应于各种service的test方法,该类方法通常使用了junit框架,而maven打包时不会把这个框架也打包进去,因而会报错。因而在package后加上-Dmaven.test.skip=true参数,意思是忽略test文件
此外,注意mvn clean时要在项目根目录下clean
三. 打包maven中央仓库没有的第三方jar包
需要手动把第三方jar包导入maven的本地仓库中,命令为
mvn install:install-file -Dfile=*.jar -DgroupId=* -DartifactId=* -Dversion=1.0 -Dpackaging=jar
Dfile后为jar包名, groupId和artifactId按标准格式自己命名,然后可以在pom中按照groupId和artifactId导入依赖,再按照通常maven打包的方式即可