maven
插件的使用
文章目录
1 前言
最近在做某个需求的时候,由于需要将某个功能打成一个jar
包,以便其他模块也能使用,于是我就在公司项目下面新建了两个子模块,一个放后台服务,一个放前端的页面(不要问我为什么不用vue
啊),然后不可避免的就碰到很多问题(主要是对maven
打包不熟悉,我的两个jar
包引入项目后一直不生效)。所以趁着周六休息,来学习一下maven
插件的使用。
先来重点看如下两个插件,其他插件以后用到了再记录
maven-dependency-plugin
maven-assembly-plugin
2 maven-dependency-plugin
这个插件可以做什么事情呢?由goal
标签指定
copy
:将指定坐标对应的jar
包拷贝到指定目录
unpack
:将指定坐标对应的jar
包解压到指定目录
2.1 copy
下述配置在打包阶段会将junit
包拷贝到项目的target/alternateLocation
目录下
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</plugin>
2.2 copy-dependencies
和copy
命令的区别是,copy
是拷贝指定坐标的jar
包,而copy-dependencies
则是拷贝项目依赖的所有jar
包,具体用法如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
2.3 unpack
unpack
命令可以将指定的jar
包解压到指定的目录,需要注意的是,如果指定的触发阶段为compile
,那么解压之后的内容会一起打包到当前项目中,而如果是package
则不会,它只会打包自己项目内容
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<!-- 为该操作定义一个名字 -->
<id>unpack</id>
<!-- 该操作在生命周期的那个阶段触发 -->
<phase>compile</phase>
<goals>
<!-- 插件的具体操作,这里只介绍4种-->
<goal>unpack</goal>
</goals>
<!-- 操作的配置 -->
<configuration>
<!-- 配置 -->
<artifactItems>
<!-- 具体配置,此处一般是针对某个坐标的具体配置 -->
<artifactItem>
<!-- 指定坐标 -->
<groupId>org.example.it</groupId>
<artifactId>po.webresource</artifactId>
<version>1.0-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<!-- 输出路径 -->
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<!-- 坐标对应的jar包的名称 -->
<destFileName>po.webresource-1.0-SNAPSHOT.jar</destFileName>
<!-- 操作的内容 -->
<includes>**/*.html,**/*.js</includes>
<!-- 排除的内容 -->
<excludes>**/*test.html</excludes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
2.4 unpack-dependencies
和unpack
命令的区别是,unpack
是解压指定坐标的jar
包,而unpack-dependencies
则是解压项目依赖的所有jar
包,具体用法如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includes>**/*.class</includes>
<excludes>**/*.properties</excludes>
<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
3 maven-assembly-plugin
有时候我们需要将项目依赖抽出来单独打包,或者将项目里面的html、js
等静态资源抽取出来打包,就需要用到这个插件了。插件的使用如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<!-- 操作名,自己指定 -->
<id>assembly</id>
<!-- 操作触发的阶段 -->
<phase>package</phase>
<goals>
<!-- 只执行一次-->
<goal>single</goal>
</goals>
<configuration>
<!-- 自己指定的名字,和assemblies.xml配置文件中的id标签对应 -->
<finalName>html</finalName>
<!-- 配置文件的位置和名字(与pom.xml)的相对路径-->
<descriptors>assemblies.xml</descriptors>
</configuration>
</execution>
</executions>
</plugin>
除了需要在pom
中配置上述内容外,还需要引入一个配置文件assemblies.xml
(名字由自己指定)
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>html</id>
<formats>
<!-- 生成一个zip文件 -->
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<!-- 从编译后的文件中拷贝 -->
<directory>${project.build.directory}/classes</directory>
<!-- 拷贝到的文件存放的路径 -->
<outputDirectory></outputDirectory>
<useDefaultExcludes>true</useDefaultExcludes>
<excludes>
<!-- 哪些文件不拷贝 -->
<exclude>**/*.log</exclude>
<exclude>**/${project.build.directory}/**</exclude>
</excludes>
</fileSet>
</fileSets>
</assembly>
上述操作都只涉及这两个插件的简单使用,后面有用到再补充