2

我试图在启动释放项目之前清除项目依赖项的本地存储库,以确保所需的每个依赖项都在中央存储库上并从中下载。

在项目文件夹(包含 pom.xml)中,我启动以下命令:

mvn clean dependency:purge-local-repository -DreResolve=false -Dverbose=true

该项目的 POM 非常简单,只声明了对 junit:junit:3.8.1 的依赖项

该命令的输出给我:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building corelib-api 0.1.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ corelib-api ---
[INFO] Deleting d:\Users\fpaillard\git-repositories\TEST_CORELIB\corelib-api\target
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building corelib-api 0.1.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.1:purge-local-repository (default-cli) @ corelib-api ---
[WARNING] Missing POM for junit:junit:jar:3.8.1
[INFO] Skipping: corelib-api. It cannot be resolved.
[INFO] Nothing to do for project: test:corelib-api:jar:0.1.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.953s
[INFO] Finished at: Mon May 14 11:34:40 CEST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------

当我查看本地存储库(使用 选中的路径mvn help:effetive-settings)时,junit JAR 或 POM 仍在.m2/repository/junit/junit/3.8.1文件夹中。

dependency:purge-local-repository应该删吗?

我不明白上面输出的警告。为什么 junit:junit:jar:3.8.1 POM 不见了?它仍然存在于.m2/repository/junit/junit/3.8.1/junit-3.8.1.pom

问题与 INFO 行有关Skipping: corelib-api. It cannot be resolved.吗?corelib-api是我运行的项目的工件名称mvn dependency:purge-local-repository

4

2 回答 2

3

我知道这很旧,但我遇到了同样的问题,在命令行中添加-DactTransitively=false解决了这个问题。我无法说出它为什么有帮助,但它确实......

我希望这有帮助。

于 2013-09-24T08:13:48.780 回答
0

查看文档,禁用 actTransitively 选项会导致清除目标仅清除 pom.xml 直接命名的依赖项。当需要构建时,Maven 不仅会自动将您的直接依赖项,而且还会将所有 TRANSITIVE 依赖项拉入您的本地存储库。

当清除目标正在寻找要删除的内容时,如果它在依赖项的 pom 中找到其他依赖项,它会遍历这些依赖项以找出可以清除的本地存储库中的整个树。为此,它至少需要传递项目的 pom.xml。如果在本地 repo 中找不到它,或者它认为可能有更新的版本需要分析,它会去外部存储库找到它。

我认为它实际上不会在开始清除之前尝试下载完整的项目内容。但是由于它至少会拉下项目的 pom.xml 文件,因此如果找不到文件,它会抱怨,就像它正在解决实际构建的依赖项时一样。

除了阻止 Maven 在清除时访问外部存储库之外,另一个实际原因是,如果您有两个具有相同传递依赖的项目,并且您不希望从一个项目中清除影响另一个项目的性能(因为后者会必须再次下载任何缺少的依赖项)。

另一方面,需要仔细考虑的一点是,如果您不允许清除考虑所有可能的传递依赖项,您就会将一组下游依赖项留在本地存储库中,否则您会想要删除这些依赖项。

我可以说你得到的输出要么是不必要的,要么是可以用另一个标志来预防的,比如“reportInaccessibleDependencies=false”。但除非它正在扼杀你的构建,否则我不会说这有什么可担心的。

于 2016-06-23T20:37:33.267 回答