简述
maven-dependency-plugin是MAVEN的一个插件。
作用
该插件主要用于管理项目中的依赖,使用该插件可以方便地查看、下载、复制和解压缩依赖,还支持生成依赖树和依赖报告。
功能
该插件有很多可用的GOAL,大部分与依赖构建、依赖分析和依赖解决相关,这些GOAL可以直接用MAVEN的命令操作。
官方定义的所有的GOAL:https://maven.apache.org/plugins/maven-dependency-plugin/index.html
常见的操作如下:
(1)mvn dependency:tree,显示该项目的依赖关系树;
(2)mvn dependency:analyze,分析项目依赖,确定哪些依赖是已使用已声明的,已使用未声明的,未使用已声明的?
(3)mvn dependency:copy,将配置在插件中的JAR包复制到指定位置;
copy的配置:https://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
(4)mvn dependency:copy-dependencies,将项目POM文件中定义的所有依赖及其传递依赖复制到指定位置;
copy-dependencies的配置:https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html
(5)mvn dependency:unpack,将配置在插件中的JAR包复制到指定位置,并且将JAR包进行解压缩;
(6)mvn dependency:unpack-dependencies,将项目POM文件中定义的所有依赖及其传递依赖复制到指定位置,并且将JAR包进行解压缩;
应用场景
(1)某个特殊的JAR包,无法直接通过MAVEN依赖获取或者说MAVEN仓库内也不存在,那么如何将我们所需要的JAR包打入我们的生产JAR包中呢?使用:mvn dependency:copy 可以解决该问题
(2)某个特殊的JAR包内包含我们需要的文件,或者说我们如何将所需的文件从JAR包中提取出来并放入指定的位置?使用:mvn dependency:unpack 可以解决该问题
如何使用
第一步,在POM文件中添加如下内容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<!-- 在 <executions> 标签中添加需要执行的操作,可以添加的操作如下: -->
<executions>
...
</executions>
</plugin>
</plugins>
</build>
第二步,根据需要添加相关操作:
- 将所有依赖包复制到 target/libs 目录下。
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</execution>
- 将所有依赖包解压到 target/classes/lib 目录下。
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
</configuration>
</execution>
- 将依赖列表输出到 target/dependency-report.txt 报告文件中。
<execution>
<id>dependency-report</id>
<phase>compile</phase>
<goals>
<goal>list</goal>
</goals>
<configuration>
<outputFile>${project.build.directory}/dependency-report.txt</outputFile>
</configuration>
</execution>
- 将junit-4.11.jar复制到${project.build.directory}/lib/lib1目录下,将slf4j-log4j12-1.7.7.jar复制到${project.build.directory}/lib/lib2目录下。
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<outputDirectory>${project.build.directory}/lib/lib1</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
<outputDirectory>${project.build.directory}/lib/lib2</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
- 将dubbo-2.8.4.jar文件中META-INF/assembly/bin下的所有文件复制到${project.build.directory}/dubbo目录中。
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.4</version>
<outputDirectory>${project.build.directory}/dubbo</outputDirectory>
<includes>META-INF/assembly/bin\**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>