ChatGPT解决这个技术问题 Extra ChatGPT

使用 Maven 强制重新下载发布依赖项

我正在开发一个依赖 X 的项目。X 反过来又依赖于 Y。

我曾经在项目的 pom.xml 中明确包含 Y。然而,它并没有被使用,为了让事情更干净,我把它作为依赖添加到 X 的 pom 中。 X 被标记为发布依赖项。

问题是从我的项目的 pom 中删除 Y 并将其添加到 X 的 pom 后,我的项目没有在 mvn -U clean package 上选择它。我知道 -U 更新快照但不知道发布。

那么,不删除 ~/.m2/repository 目录如何强制重新下载 X 的 pom?此外,我尝试运行 dependency:purge-local-repository,但它也不起作用。

您已将问题标记为“maven-2”。在 Maven 3 中添加了 -U 选项来解决这个问题。我建议升级。
仅从方法论的角度来看,如果您更改 X 的 pom,那么它应该构成一个新版本,即使它只是一个补丁号更改:1.3 -> 1.3.1。所以,这将从一开始就消除这个问题。
但是,快照也可能存在类似问题,因此最好有一些答案。
作为参考 -U 确实“影响”已发布的版本,但只有在以前从未成功下载过它们时才下载它们。奇怪的混合。 stackoverflow.com/questions/29020716/…
dependency:purge-local-repository 应该可以工作,它不会删除它吗?

r
rogerdpack

您无法让 Maven 重新下载依赖项,但您可以做的是清除使用 mvn dependency:purge-local-repository 错误下载的依赖项

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

这会查找当前项目的所有传递依赖项的列表,删除它们,然后重新下载它们。如果你想在每次构建中运行它,你甚至可以将它作为插件添加到你的 pom 中。


这不就是一回事吗?
它不需要访问文件系统,如果您只配置构建作业(例如对于 CI 系统),这可能是一个问题。
如果多个项目运行 mvn dependency:purge-local-repository clean package,可能是一个项目删除本地存储库中的相同依赖项,而另一个项目正在运行编译。如何避免?
@vikyd,不确定这是否是最好的方法,但您可以使用 MAVEN_OPTS 环境变量强制 maven 从标准 .m2/respository 位置的不同文件夹下载/使用依赖项,如下所示:export MAVEN_OPTS="-Dmaven.repo.local=${PROJECT_DIR}/maven.repository 这将防止 maven 使用普通文件夹中的任何依赖项,而是使用 Dmaven.repo.local= 指定的依赖项。
R
Ryan Angilly

我刚刚删除了我的 ~/.m2/repository 并强制重新下载;)


作为最后的手段,它会有所帮助,我有一个项目,其中 eclipse 和 maven 有点“困惑”。只需删除 .m2 文件夹即可使项目正确编译和运行。
也可以有选择地删除您知道需要从存储库内部刷新的依赖项。手动清除,如果你愿意的话。
r
rogerdpack

基于 Ali Tokmen 的回答。我设法使用以下命令强制删除单个特定的本地依赖项:

mvn dependency:purge-local-repository -DmanualInclude=com.skyfish:utils

这样,它会从我的 .m2/repository 中删除 utils,并且当我继续运行 mvn clean install 时,它总是会重新下载 utils JAR 依赖项。如果您想要更程序化的内容,还可以查看 -Dinclude=... 选项。


我只需要一种方法来强制 maven 重新下载依赖项。这是实际执行此操作的唯一答案,而其他答案建议删除所有内容。谢谢
R
Richard

我认为以下命令可能会对您有所帮助!

mvn -U clean install

在问题中使用 Maven 释放依赖项。不,这可能是一个更好的评论。
n
nanosoft

项目右键单击-> Maven -> 更新项目并选中屏幕截图中的复选框。它也会更新版本:)

https://i.stack.imgur.com/peNZX.png


很高兴知道他们是如何实现“/Releases”部分的。
感谢这正是我所需要的。
这是网豆吗?无论如何,我猜该复选框意味着向 maven 提供 -U 命令,其中“某种”更新发布 stackoverflow.com/a/29020990/32453 但不是 OP 正在寻找的方式:)
A
ArpitBora
mvn clean install -U

-U 表示强制更新依赖项。

如果您想在没有 clean 或 -U 的情况下更新单个依赖项,您可以将其从本地存储库中删除,然后构建。


同样,这只会重新下载 SNAPSHOT 依赖项。
s
smac89

如果您知道 X 的组 id,则可以使用此命令重新下载所有 X 及其依赖项

mvn clean dependency:purge-local-repository -DresolutionFuzziness=org.id.of.x

它与建议使用 dependency:purge-local-repository 的其他答案做同样的事情,但它只删除并重新下载与 X 相关的所有内容。


c
crowne

当您将它添加到 X 时,您应该增加 X 的版本号,即 X-1.2 然后 X-1.2 应该已经安装/部署,您应该将项目对 X 的依赖更改为依赖于新版本 X-1.2


C
Community

如果您真的想强制下载所有依赖项,可以尝试重新初始化整个 maven 存储库。就像在 this article 中已经描述的那样,您可以使用:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

S
Saurabh Oza

只需删除 ~/.m2/repository...../actual_path 无效 LOC 所在的位置,因为它会强制重新下载已删除的 jar 文件。不要删除整个存储库文件夹,而是删除错误所在的特定文件夹。


T
Tharindu Sathischandra

删除 ~/.m2/repository 将解决您的问题。但是,如果您仍需要保留旧的 ~/.m2/repository,您可以暂时更改 maven 本地路径。

如果您正在使用 IntelliJ,只需转到 Maven 设置并将本地存储库路径更改为其他位置。您可能需要勾选附近的覆盖复选框。

https://i.stack.imgur.com/fshTJ.png


请阅读问题:“所以,不删除 ~/.m2/repository 目录......”
S
SagaramVijay

转到构建路径...删除您添加的现有maven库...单击添加库...单击maven托管依赖项...然后单击maven项目设置...检查解决maven依赖项复选框..它将下载所有maven依赖


这假设使用了一些 IDE,这个问题不支持这个假设,而且你甚至没有指定什么 IDE!
C
Caffeinated Coder

上面提供的大多数答案都可以解决问题。

但是,如果您使用 IntelliJ 并希望它自动为您修复它,请转到 Maven 设置。

构建、执行、部署 -> 构建工具 -> Maven

https://i.stack.imgur.com/U3QUX.jpg

禁用脱机工作

启用始终更新快照(需要时切换)


如果您也可以在投票时分享拒绝投票的原因,我将不胜感激。谢谢你。
大概是因为快照不是发布,所以这并不能解决问题。