16

我正在从 Maven 项目目录中运行以下命令:

mvn dependency:purge-local-repository

预期的行为是什么?

它会删除(并重新下载?)我的本地存储库中已经存在于该特定项目(即我所在的目录)的所有依赖项,还是会删除我本地存储库的所有内容?

4

3 回答 3

15

默认情况下,purge-local-repository将从本地存储库中删除与运行它的项目的每个依赖项(包括传递)的版本相关联的所有文件:

从本地存储库中删除项目依赖项,并可选择重新解析它们。

发挥作用的几个因素是:

  • 默认情况下,插件会清除传递依赖项;这可以通过actTransitively参数进行配置。
  • 默认情况下,从本地存储库中清除的所有工件都会重新解析;这可以通过reResolve参数进行配置。
  • 从本地存储库中清除的实际文件对应于与清除的工件版本关联的所有文件。例如,如果foo:bar:1.0清除了依赖项,则该路径下的所有文件foo/bar/1.0/*都将被删除。这可以通过resolutionFuzziness参数进行配置(其默认值为version):
    • artifactId将清除被清除工件的工件 ID 路径下的所有文件。在上面的示例中,所有文件foo/bar/**都将被清除(因此,所有版本都将被删除)。
    • groupId将清除路径下的所有文件,以清除正在清除的工件的组 ID。在上面的示例中,foo/**将清除下面的所有文件(因此,所有工件 ID 的所有版本都将被删除)。
    • 的值file只会清除正在清除的工件的文件。在上面的示例中,只会bar-1.0.jar*删除文件(这包括sha1他们可能拥有的任何文件)。它不会清除相关的 POM 文件。

您可以通过打印具有目标的项目的所有依赖项列表来查看将清除哪些工件list

mvn dependency:list

如果您决定不清除传递依赖项,则可以选择添加excludeTransitive到此命令。

于 2016-11-02T14:31:30.577 回答
1

使用相同的清除但在细节上,如果项目 A 和项目 B(Jar)在本地构建并且项目 A 依赖于 B(在本地 Repo 中)可以像这样解决

mvn 依赖:purge-local-repository -Dinclude=com.xxxx.projectB:projectB

并在项目 A 中添加依赖项将解决该问题。

<dependency>
                <groupId>com.xxxx.projectB</groupId>
                <artifactId>projectB</artifactId>
                <version>${project.version}</version>
            </dependency>

希望这可以帮助,

于 2018-04-06T03:01:38.150 回答
0

下列的

http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html

我们那个

dependency:purge-local-repository

从本地存储库中删除项目依赖项,并可选择重新解析它们。

于 2016-11-02T14:31:19.203 回答