背景
工作中经常遇到打包,但往往得过且过,使用命令mvn clean install dDmaven.skip.test=true,一行命令编译完出jar包,手动替换到环境验证就完了。至于jar包在CI构建中如何编译后打包到对应安装包位置,不甚了解。这里介绍maven的简单插件,帮助我们在编译源码出jar包后,如何移动jar包。下面是我工作中遇到maven构建开始疑惑的几个问题:
- mvn正常编译后jar包的位置?
- 如何编译后将jar包移动到我想要的位置?
- 一些静态资源未被打包进jar包怎么办?
- …
插件介绍
首先我们看知识的源头maven插件官网,如下是打包插件总览:
工作中,一般主要涉及jar、war包相关,于是上述的 jar 和 war 插件是我们要关注的。后面的 source 插件等一般不涉及。
- mvn正常编译后jar包的位置?默认target目录下
1.1 maven-jar-plugin默认不用声明,即不会在pom.xml的<plugins>...</plugins>
中看到。mvn构建生命周期默认携带
1.2<packaging>jar</packaging>
不管是否直接声明,pom.xml中默认的打包类型就是jar包。
1.3 compile阶段会编译src/main/java/
下的java资源,连带src/main/resources
打jar包放置在pom同级的target目录下。
1.4 source插件 仅用于将源码打入jar包。一般工作中涉及不到。具体的使用可以参考这篇博客《Maven自定义绑定》 - 如何编译后将jar包移动到我想要的位置?总共6种方式,前三种较为常见。
2.1 通过maven-jar-plugin指定outputDirectory输出路径
2.2 通过maven-resources-plugin指定outputDirectory输出路径
2.3 通过maven-antrun-plugin复制jar包
2.1 通过maven-jar-plugin指定outputDirectory输出路径
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 指定打包的jar包输出路径 -->
<outputDirectory>D:\test</outputDirectory>
<!--不打入jar包的文件类型或者路径 -->
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.yml</exclude>
<exclude>static/**</exclude>
<exclude>templates/**</exclude>
</excludes>
</configuration>
</plugin>
2.2 通过maven-resources-plugin指定outputDirectory输出路径
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<!--打成jar包后复制到的路径 -->
<outputDirectory>
D:\test1
</outputDirectory>
<resources>
<resource>
<!--项目中的路径 -->
<directory>src/main/resources/</directory>
</resource>
</resources>
</configuration>
</execution>
<!--可配置多个提取复制路径只需要 “<id>”名字不一样即可 -->
<execution>
<id>copy-bulid</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>
D:\test2
</outputDirectory>
<resources>
<resource>
<directory>target</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
2.3 通过maven-antrun-plugin复制jar包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<configuration>
<target>
<echo message="*******************install*******************" />
<mkdir dir="${basedir}/target/classes" />
<copy todir="../target/commons" overwrite="true">
<fileset dir="${project.build.directory}"
erroronmissingdir="false">
<include name="*.jar" />
</fileset>
</copy>
<move file="${project.build.directory}/xxxxxxx.jar"
tofile="${project.build.directory}/xxx.jar" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>clean</id>
<phase>clean</phase>
<configuration>
<target>
<echo message="*******************clean*******************" />
<delete dir="target" />
<mkdir dir="${basedir}/target/classes" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
- 一些静态资源未被打包进jar包怎么办?三种方式
Maven AntRun 插件
看这篇就够了,《Ant之build.xml配置详解》