用法
关于如何使用依赖目标的简要示例:
- 依赖:复制
- 依赖:复制依赖
- 依赖:解压
- 依赖项:解包依赖项
- 依赖:解决
- 依赖:来源
- 依赖:解决插件
- 依赖:离线
- 依赖:清除本地存储库
- 依赖:分析
- 依赖:分析-dep-mgt
- 依赖:分析报告
- 依赖:树
- 依赖:构建类路径
- 依赖:列表存储库
- 依赖:获取
dependency:copy
此目标旨在绑定到生命周期阶段并在您的pom.xml
. 它将从存储库中解析工件并将副本放置在指定位置。可以在一次执行中定义多个工件。指定了默认输出目录,但可以通过设置可选的 outputDirectory 字段为每个 ArtifactItem 覆盖。可以将可选的新名称设置为重命名或复制时剥离的版本。
工件版本是可选的。如果未设置,插件将尝试从项目依赖项中解析它,然后是依赖项管理部分。
有关如何处理覆盖的规则,请参阅覆盖规则部分。
如果您打算将插件绑定到与您的构建一起执行,请像这样配置插件:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <classifier> [classifier - optional] </classifier> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <destFileName>[ filename ]</destFileName> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
如果您打算将此目标配置为在命令行上执行,请使用:
mvn dependency:copy
您不能将配置放在executions标签内。您的配置应如下所示:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <classifier> [classifier - optional] </classifier> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <destFileName>[ filename ]</destFileName> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </plugin> </plugins> </build> [...] </project>
笔记:
- 默认情况下,使用 Maven 工件文件名约定(即artifactId-version-classifier.type )将工件复制到outputDirectory中。使用以下规则覆盖默认约定:
- 使用artifactItem.destFileName覆盖默认文件名。
- 使用stripVersion从默认文件名中删除版本。设置artifactId.destFileName时忽略此字段。
- 使用artifactItem.outputDirectory覆盖每个artifactItem插件的outputDirectory配置。
dependency:copy-dependencies
此目标可以绑定到生命周期阶段并在您的pom.xml
. 它将从存储库中解析依赖项(包括传递依赖项)并将副本放置在指定位置。
工件可以根据类型放置在子文件夹中。例如:
\输出目录
\输出目录\罐子
\输出目录\战争
可以将工件放置在每个工件的子文件夹中。例如:\outputDirectory\junit-junit-3.8.1
此功能也适用于每种类型的子文件夹。例如:\outputDirectory\jars\junit-junit-3.8.1\
工件也可以通过指定分类器和可选类型来解决。类型仅与分类器一起使用,默认为 java-sources。当分类器被设置时,依赖列表被用作使用分类器和类型解析工件的基础。例如:mvn dependency:copy-dependencies -Dclassifier=sources
将尝试查找所有依赖项的来源并复制它们。
还包括按类型(war、jar 等)、范围(运行时、测试等)、分类器(jdk14、源等)、groupId、artifactId 或它们的组合来包含或排除的能力。
注意:从 2.0-alpha-5 开始,您可以混合使用同一类别(即范围)的包含和排除。包含在排除之前处理。
有关如何处理覆盖的规则,请参阅覆盖规则部分。
也可以从命令行启动目标,例如:mvn dependency:copy-dependencies [optional params]
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!-- configure the plugin here --> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
dependency:unpack
此目标旨在绑定到生命周期并在您的 pom.xml 中进行配置。它将从存储库中解析工件并将副本放置在指定位置。可以在一次执行中定义多个工件。指定了默认的 outputDirectory,但可以通过设置可选的 outputDirectory 字段为每个 ArtifactItem 覆盖。
如果为每个 artifactItem 定义了不同的包含/排除参数,则可以多次解压单个工件
有关如何处理覆盖的规则,请参阅覆盖规则部分。
工件版本是可选的。如果未设置,插件将尝试从项目依赖项中解析它,然后是依赖项管理部分。
如果您打算将插件绑定到与您的构建一起执行,请像这样配置插件:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>unpack</id> <phase>package</phase> <goals> <goal>unpack</goal> </goals> <configuration> <!-- configure the plugin here --> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
如果您打算将此目标配置为在命令行上执行,请使用:
mvn dependency:unpack
您不能将配置放在executions标签内。您的配置应如下所示:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <classifier> [classifier - optional] </classifier> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <includes>[ comma separated list of file filters ]</includes> <excludes>[ comma separated list of file filters ]</excludes> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </plugin> </plugins> </build> [...] </project>
dependency:unpack-dependencies
这个目标可以绑定到一个生命周期并在你的 pom.xml 中配置。它将从存储库中解析依赖项(包括传递依赖项)并将它们解包到指定位置。
Unpack-dependencies 默认包含传递依赖。要仅包括直接依赖项,请将 excludeTransitive 参数设置为 true。
依赖关系可以通过类型列表包含或排除。有关详细信息,请参阅解包依赖项。
可以根据类型将工件解压缩到子文件夹中。例如:
\输出目录
\输出目录\罐子
\输出目录\战争
可以将工件放置在每个工件的子文件夹中。例如:\outputDirectory\junit-junit-3.8.1
此功能也适用于每种类型的子文件夹。例如:\outputDirectory\jars\junit-junit-3.8.1\
工件也可以通过指定分类器和可选类型来解决。类型仅与分类器一起使用,默认为 java-sources。当分类器被设置时,依赖列表被用作使用分类器和类型解析工件的基础。例如:mvn dependency:unpack-dependencies -Dclassifier=sources
将尝试查找所有依赖项的源并解压缩它们。
可以根据需要应用过滤器以包含或排除某些文件或文件集
还包括按类型(war、jar 等)、范围(运行时、测试等)、分类器(jdk14、源等)、groupId、artifactId 或它们的组合来包含或排除的能力。
注意:从 2.0-alpha-5 开始,您可以混合使用同一类别(即范围)的包含和排除。包含在排除之前处理。
有关如何处理覆盖的规则,请参阅覆盖规则部分。
也可以从命令行启动目标,例如:mvn dependency:unpack-dependencies [optional params]
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>unpack-dependencies</id> <phase>package</phase> <goals> <goal>unpack-dependencies</goal> </goals> <configuration> <!-- configure the plugin here --> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
覆盖规则
使用以下规则复制或解包工件:
- 如果目标中不存在工件,则复制/解压缩它。
否则:
- 仅用于复制/解包目标:如果
artifactItem / overWrite
oroverWrite
为真,那么它将强制覆盖。 - 释放检查
overWriteReleases
值(默认 = false)。如果为真,那么它将强制覆盖。 - 快照检查
overWriteSnapshots
值(默认 = false)。如果为真,那么它将强制覆盖。 - 如果以上均未设置为 true,则默认为该
overWriteIfNewer
值 (default = true)。如果该值为 true,则仅当源比目标更新(或目标中不存在)时,插件才会复制。(对于解包,这将检查在markersDirectory
路径中创建的标记文件是否存在。为避免 之后的意外行为mvn clean
,此路径通常应包含在/target
层次结构中。)
例子:
- 使用默认设置(
overWriteReleases
= false、overWriteSnapshots
= false、overWriteIfNewer
= true),只有当源比目标(或解包时的标记文件)更新时,发布或快照工件才会覆盖目标。 - 如果
overWriteReleases
= true,则发布工件(即foo-1.0.jar
)将始终覆盖。 - 如果
overWriteSnapshots
= true,则快照工件(即foo-1.0-SNAPSHOT.jar
)将始终覆盖。 - 如果所有值都为 false,则仅当目标中不存在复制/解包(或
markersDirectory
解包)时才会发生复制/解包。
dependency:resolve
Resolve 旨在从命令行使用,例如:mvn dependency:resolve -Dsilent=true
这个目标只是告诉 maven 解析所有测试范围(包括编译)依赖项,然后显示解析的版本。这旨在帮助确保将所有依赖项下载到本地存储库。这在故障排除或间歇性远程存储库故障时非常有用,因为重复构建多项目模块是不可取的,并且构建在依赖关系解析上失败。它还可用于快速确定版本的解析方式。
工件也可以通过指定分类器和可选类型来解决。类型仅与分类器一起使用,默认为 java-sources。当分类器被设置时,依赖列表被用作使用分类器和类型来解析工件的基础。例如:mvn dependency:resolve -Dclassifer=test-jar
将尝试查找所有依赖项的 test-jar 并将它们解析到本地存储库。
dependency:sources
源旨在从命令行使用,例如:mvn dependency:sources -Dsilent=true
这与解析目标相同,只是它包括源附件(如果存在)。当您要将源附件下载到本地存储库时,这很有用。
您还markersDirectory
可以在 pom 或 settings 中将其定义为所有项目的公共位置。这允许系统更快地解析没有发布源的依赖项的源。该插件将存储一个标记文件来描述源是否已解析。通过将它们放置在一个公共位置,可以避免多次尝试解析不存在的源。
dependency:resolve-plugins
Resolve-plugins 旨在从命令行使用,例如:mvn dependency:resolve-plugins -Dsilent=true -DexcludeTransitive=true
这与 resolve 目标相同,只是它解析插件和可选的依赖项。
dependency:go-offline
这个目标与调用完全相同mvn dependency:resolve dependency:resolve-plugins
。
dependency:purge-local-repository
此目标旨在从本地存储库中删除当前项目(或项目,在多模块构建的情况下)的所有依赖项。可以使用各种限制参数运行清除,包括工件排除、仅限于直接依赖项以及不同级别的删除深度。默认情况下,删除的工件可以在之后重新解决;您可以通过指定来禁用它-DreResolve=false
。
以最简单的形式,可以这样调用目标:
mvn dependency:purge-local-repository
要添加不删除工件的限制org.apache.maven:maven-plugin-api
,我们可以将命令修改为:
mvn dependency:purge-local-repository -Dexclude=org.apache.maven:maven-plugin-api
注意:该exclude
参数是以逗号分隔的 groupId:artifactId 对列表。它有一个对应的基于列表的参数——excludes
方便在POM内部使用。
这个目标的另一个方便的方面是能够消除不同深度的伪影。这些深度是:
- file - 仅删除工件的文件。
- version - 删除包含此工件的版本目录。金额为
file.getParentFile()
。 - artifactId - 删除包含此工件的 artifactId 目录。金额为
file.getParentFile().getParentFile()
。 - groupId - 删除包含此工件的 groupId 目录结构。
至少,这相当于
file.getParentFile().getParentFile().getParentFile()
。但是,如果 groupId 包含多个部分,则目标将修剪所有仅包含与此工件关联的文件的 groupId-part 目录。同样,请注意,此修剪算法的例外是最低的 groupId 部分,它将始终被修剪。
要将依赖项工件修剪回其关联的 artifactId 目录(例如,为了验证正确的工件解析),只需使用以下命令:
mvn dependency:purge-local-repository -DresolutionFuzziness=artifactId
最后,可以将此目标绑定到构建生命周期。这样做的一个原因可能是在初始化构建时清除所有依赖项,以验证正确的解决方案。
dependency:analyze
此目标执行字节码分析以确定丢失或未使用的依赖项。这个目标是从命令行启动的。它将分叉构建并执行测试编译,因此有类文件要分析。如果要在 pom 中绑定分析,请dependency:analyze-only
改用。
这个目标可以从命令行执行:
mvn dependency:analyze
样本输出:
[INFO] [dependency:analyze] [WARNING] Used undeclared dependencies found: [WARNING] classworlds:classworlds:jar:1.1-alpha-2:compile [WARNING] org.apache.maven.shared:maven-invoker:jar:2.0.7-SNAPSHOT:test
dependency:analyze-dep-mgt
此目标在最终解决后查看依赖项,并在您的 dependencyManagement 部分中查找不匹配项。在 2.0.6 之前的 maven 版本中,可以继承与您的 dependencyManagement 不匹配的版本。有关详细信息,请参阅MNG-1577。
如果此目标检测到问题,您应该在升级到 2.0.6 之前尝试解决差异以避免任何意外。这可以通过升级或降级 dependencyManagement 中的版本以匹配运行时实际包含的版本来完成,或者您可以在项目中指定一个依赖项以覆盖所包含的内容。您可以通过重新运行此目标来检查结果。如果您决定使用依赖项进行覆盖,请务必记下它,以便在升级到 2.0.6 后将其删除。您还可以使用 dependency:analyze 目标来发现这个未使用的直接依赖关系。
此目标对于仅检测直接覆盖dependencyManagement 的项目也很有用。将 ignoreDirect 设置为 false 以检测这些正常情况。
这个目标可以从命令行执行:
mvn dependency:analyze-dep-mgt
样本输出:
[INFO] Found Resolved Dependency / DependencyManagement mismatches: [INFO] Dependency: commons-lang:commons-lang:jar [INFO] DepMgt : 1.0 [INFO] Resolved: 2.3 [INFO] Dependency: commons-digester:commons-digester:jar [INFO] DepMgt : 1.6 [INFO] Resolved: 1.7 [INFO] Dependency: javax.servlet:servlet-api:jar [INFO] DepMgt : 2.3 [INFO] Resolved: 2.4 [WARNING] Potential problems found in Dependency Management
dependency:analyze-report
此目标用于在maven-site-plugin
.
<reporting> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <reportSets> <reportSet> <reports> <report>analyze-report</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting>
dependency:tree
此目标用于查看当前正在构建的项目的依赖层次结构。它将输出 Maven 构建过程实际使用的已解析依赖树。
这个目标可以从命令行执行:
mvn dependency:tree
或者,output
可以指定参数以将输出转移到文件:
mvn dependency:tree -DoutputFile=/path/to/file
此外,该outputType
参数可用于生成不同格式的输出。当前支持以下格式:
mvn dependency:tree -DoutputFile=/path/to/file.graphml -DoutputType=graphml
dependency:build-classpath
自:2.0-alpha-2
此目标将从本地存储库输出依赖项的类路径字符串到文件或日志,并可选择附加和部署文件。例如,该文件将包含一个类路径字符串,如下所示:
/home/foo/.m2/repository/org/java/utils/util/util-1.0.jar:/home/foo/.m2/ ....
然后可以像这样使用生成的文件:
java -cp `cat resultFile` MyClass
在最简单的形式中,要将类路径输出到日志,可以这样调用目标:
mvn dependency:build-classpath
或将类路径写入 cp.txt。:
mvn dependency:build-classpath -Dmdep.outputFile=cp.txt
目标也可以通过以下配置绑定到生命周期阶段:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>build-classpath</id> <phase>generate-sources</phase> <goals> <goal>build-classpath</goal> </goals> <configuration> <!-- configure the plugin here --> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
dependency:list-repositories
此目标用于列出此构建所依赖的所有存储库。它将显示在您的设置、pom 中定义并在传递依赖 pom 中声明的存储库。
dependency:get
此目标用于使用其 Maven 坐标从远程存储库中获取工件和(可选)其依赖项。
mvn dependency:get -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=jar -Dclassifier=sources -DremoteRepositories=central::default::https://repo.maven.apache.org/maven2,myrepo::::http://myrepo.com/maven2 mvn dependency:get -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=jar -Dclassifier=sources -DremoteRepositories=https://repo.maven.apache.org/maven2 mvn dependency:get -Dartifact=org.apache.maven:maven-core:2.2.1:jar:sources -DremoteRepositories=https://repo.maven.apache.org/maven2 -Ddest=/tmp/myfile.jar