关于如何使用依赖目标的简要示例。
此目标旨在绑定到生命周期阶段并在您的pom.xml中进行配置。它将从存储库中解析工件并将副本放置在指定位置。可以在一次执行中定义多个工件。指定了默认输出目录,但可以通过设置可选的 outputDirectory 字段为每个 ArtifactItem 覆盖。可以将可选的新名称设置为重命名或复制时剥离的版本。
工件版本是可选的。如果未设置,插件将尝试从项目依赖项中解析它,然后是依赖项管理部分。
有关如何处理覆盖的规则,请参阅覆盖规则部分。
如果您打算将插件绑定到与您的构建一起执行,请像这样配置插件:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</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>
如果您打算将此 mojo 配置为在命令行上执行,请使用:
mvn dependency:copy
您不能将配置放在executions标签内。您的配置应如下所示:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</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>
笔记:
此目标可以绑定到生命周期阶段并在您的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>2.10</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>
此目标旨在绑定到生命周期并在您的 pom.xml 中进行配置。它将从存储库中解析工件并将副本放置在指定位置。可以在一次执行中定义多个工件。指定了默认的 outputDirectory,但可以通过设置可选的 outputDirectory 字段为每个 ArtifactItem 覆盖。
如果为每个 artifactItem 定义了不同的包含/排除参数,则可以多次解压单个工件
有关如何处理覆盖的规则,请参阅覆盖规则部分。
工件版本是可选的。如果未设置,插件将尝试从项目依赖项中解析它,然后是依赖项管理部分。
如果您打算将插件绑定到与您的构建一起执行,请像这样配置插件:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</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>
如果您打算将此 mojo 配置为在命令行上执行,请使用:
mvn dependency:unpack
您不能将配置放在executions标签内。您的配置应如下所示:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</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>
这个目标可以绑定到一个生命周期并在你的 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>2.10</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>
使用以下规则复制或解包工件:
否则:
例子:
Resolve 旨在从命令行使用,例如:mvn dependency:resolve -Dsilent=true
这个目标只是告诉 maven 解析所有测试范围(包括编译)依赖项,然后显示解析的版本。这旨在帮助确保将所有依赖项下载到本地存储库。这在故障排除或间歇性远程存储库故障时非常有用,因为重复构建多项目模块是不可取的,并且构建在依赖关系解析上失败。它还可用于快速确定版本的解析方式。
工件也可以通过指定分类器和可选类型来解决。类型仅与分类器一起使用,默认为 java-sources。当分类器被设置时,依赖列表被用作使用分类器和类型来解析工件的基础。例如:mvn dependency:resolve -Dclassifer=test-jar将尝试找到所有依赖项的 test-jar 将它们解析到本地存储库。
源旨在从命令行使用,例如:mvn dependency:sources -Dsilent=true
这与解析目标相同,只是它包括源附件(如果存在)。当您希望将源附件下载到本地存储库并且您不想使用 eclipse 插件来执行此操作时,这很有用,因为 eclipse 插件会创建/覆盖 eclipse 文件。
您还可以在 pom 或 settings中将 markersDirectory定义为所有项目的公共位置。这允许系统更快地解析没有发布源的依赖项的源。该插件将存储一个标记文件来描述源是否已解析。通过将它们放置在一个公共位置,可以避免多次尝试解析不存在的源。
Resolve-plugins 旨在从命令行使用,例如:mvn dependency:resolve-plugins -Dsilent=true -DexcludeTransitive=true
这与 resolve 目标相同,只是它解析插件和可选的依赖项。
此目标旨在从本地存储库中删除当前项目(或项目,在多模块构建的情况下)的所有依赖项。可以使用各种限制参数运行清除,包括工件排除、仅限于直接依赖项以及不同级别的删除深度。默认情况下,删除的工件可以在之后重新解决;您可以通过指定-DreResolve=false来禁用此功能。
以最简单的形式,可以这样调用 mojo:
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.getParentFile().getParentFile().getParentFile()。但是,如果 groupId 包含多个部分,则 mojo 将修剪所有仅包含与此工件关联的文件的 groupId-part 目录。同样,请注意,此修剪算法的例外是最低的 groupId 部分,它将始终被修剪。
要将依赖项工件修剪回其关联的 artifactId 目录(例如,为了验证正确的工件解析),只需使用以下命令:
mvn dependency:purge-local-repository -DresolutionFuzziness=artifactId
最后,可以将此 mojo 绑定到构建生命周期。这样做的一个原因可能是在初始化构建时清除所有依赖项,以验证正确的解决方案。
自:2.0-alpha-2
此目标将从本地存储库输出依赖项的类路径字符串到文件或日志,并可选择附加和部署文件。例如,该文件将包含一个类路径字符串,如下所示:
/home/foo/.m2/repository/org/java/utils/util/util-1.0.jar:/home/foo/.m2/ ....
然后可以像这样使用生成的文件:
java -cp `cat resultFile` MyClass
在最简单的形式中,为了将类路径输出到日志,mojo 可以这样调用:
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>2.10</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>
这个 mojo 执行字节码分析以确定丢失或未使用的依赖项。这个目标是从命令行启动的。它将分叉构建并执行测试编译,因此有类文件要分析。如果要在 pom 中绑定分析,请改用依赖项:仅分析mojo。
这个 mojo 可以从命令行执行:
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
这个 mojo 会在最终解决后查看依赖项,并在您的 dependencyManagement 部分中查找不匹配项。在 2.0.6 之前的 maven 版本中,可以继承与您的 dependencyManagement 不匹配的版本。有关详细信息,请参阅MNG-1577。
如果这个 mojo 检测到问题,您应该在升级到 2.0.6 之前尝试解决差异以避免任何意外。这可以通过升级或降级dependencyManagement 中的版本以匹配运行时实际包含的版本来完成,或者您可以在项目中指定一个依赖项来覆盖所包含的内容。您可以通过重新运行此 mojo 来检查结果。如果您决定使用依赖项进行覆盖,请务必记下它,以便在升级到 2.0.6 后将其删除。您还可以使用 dependency:analyze mojo 来发现这个未使用的直接依赖关系。
这个 mojo 对于仅检测直接覆盖dependencyManagement 的项目也很有用。将 ignoreDirect 设置为 false 以检测这些正常情况。
这个 mojo 可以从命令行执行:
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
这个 mojo 用于查看当前正在构建的项目的依赖层次结构。它将输出 Maven 构建过程实际使用的已解析依赖树。
这个 mojo 可以从命令行执行:
mvn dependency:tree
或者,可以指定输出参数以将输出转移到文件:
mvn dependency:tree -Doutput=/path/to/file
此外,outputType参数可用于生成不同格式的输出。当前支持以下格式:
mvn dependency:tree -Doutput=/path/to/file.graphml -DoutputType=graphml
此 mojo 用于使用其 Maven 坐标从远程存储库中获取工件和(可选)其依赖项。
mvn dependency:get -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=jar -Dclassifier=sources -DremoteRepositories=central::default::http://repo1.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=http://repo1.maven.apache.org/maven2 mvn dependency:get -Dartifact=org.apache.maven:maven-core:2.2.1:jar:sources -DremoteRepositories=http://repo1.maven.apache.org/maven2 -Ddest=/tmp/myfile.jar
这个 mojo 用于在maven-site-plugin的输出中包含依赖关系的报告。
<reporting> <plugins> ... <plugin> <artifactId>maven-dependency-plugin</artifactId> <version>2.5.1</version> <reportSets> <reportSet> <reports> <report>analyze-report</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting>