【问题标题】:Purge artefacts with maven-dependency-plugin使用 maven-dependency-plugin 清除伪影
【发布时间】:2017-05-30 14:44:29
【问题描述】:

我想运行mvn 命令来清除~/.m2/repository/here/goes/my/groupid 下的所有伪影。为此,我运行:

mvn -pl my-module dependency:purge-local-repository -DresolutionFuzziness=groupId -Dinclude=<here-goes-my-groupid> -DactTransitively=false -DreResolve=false -Dverbose=true

只要当前工件 (my-maven-plugin) 的当前版本 (3.0.0) 位于本地存储库中,此方法就可以正常工作。

如果当前工件 (my-maven-plugin) 的当前版本 (3.0.0) 在本地 repo 中不是(例如,在本地只有此工件的旧版本repo,比如 2.9.0),什么都没有被清除:

[INFO] --- maven-dependency-plugin:3.0.0:purge-local-repository (default-cli) @ my-maven-plugin ---
Downloading: https://repo.maven.apache.org/maven2/here/goes/my/groupid/my-maven-plugin/3.0.0/my-maven-plugin-3.0.0.jar
[INFO] Unable to resolve all dependencies for : <here-goes-my-groupid>:my-maven-plugin:3.0.0. Falling back to non-transitive mode for initial artifact resolution.
[INFO] No artifacts included for purge for project: <here-goes-my-groupid>:my-maven-plugin:maven-plugin:3.0.0

我不明白为什么 maven-dependency-plugin 会尝试从 maven Central 下载任何内容。它应该做的就是递归地在本地文件系统中删除一个文件夹。

如何强制清除给定 groupId 下的所有 artefact,无论当前 artefact 的当前版本是否在本地 repo 中?

【问题讨论】:

  • 您在命令中使用的my-module 的链接是什么? mvn dependency:purge-local-repository -DresolutionFuzziness=groupId -Dinclude=&lt;here-goes-my-groupid&gt; -DactTransitively=false -DreResolve=false -Dverbose=true 按预期工作。请注意,如果使用 3.0.0 插件,则无需从 Maven 项目启动该命令,即 mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.0:purge-local-repository ...
  • 当我从 maven 项目外部运行 mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.0:purge-local-repository -DresolutionFuzziness=groupId -Dinclude=&lt;my.groupId&gt; -DactTransitively=false -DreResolve=false -Dverbose=true 时,它什么也没做:Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/standalone-pom/1/standalone-pom-1.pom [WARNING] The POM for org.apache.maven:standalone-pom:pom:1 is missing, no dependency information available [INFO] No artifacts included for purge for project: org.apache.maven:standalone-pom:pom:1
  • “您在命令中使用的 my-module 的链接是什么?”是什么意思? ? my-module 是我的 reactor pom 中的一个模块。
  • 你的 ~/.m2/settings.xml 和 pom.xml 中有什么?
  • settings.xml: 仅用于发布的凭据

标签: maven maven-3 maven-plugin


【解决方案1】:

include 期望被清除的依赖项的 groupId 与项目的完全相同。 选项resolutionFuzzinessactTransitivelyreResolve 仅在满足上述groupId 条件时适用。 我想,这可能是因为插件开发人员希望防止意外清除项目组之外的工件。这是我的疯狂猜测。

放松! manualInclude 来救援。无论项目的groupId 是什么,它都可以清除工件。

试试这个:

mvn dependency:purge-local-repository -DmanualInclude=<group-id>:<artifact-id>

或者这个:

mvn dependency:purge-local-repository -DmanualIncludes=<group-id>:<artifact-id>

但是,不同之处在于,与 include 不同,它不会在清除后重新解析工件,无论您为 reResolve 赋予什么值。

This 条件跳过重新解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多