我试图在启动发布之前清除项目依赖项的本地存储库,以确保所需的每个依赖项都在中央存储库中并从中下载。
在项目文件夹(包含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
的项目的工件名称。
答案 0 :(得分:2)
我知道这已经过时了,但我遇到了同样的问题,并且在命令行中添加 -DactTransitively = false 解决了这个问题。我无法说出它为何有所帮助,但它确实......
我希望这会有所帮助。
答案 1 :(得分:0)
查看文档,禁用actTransitively选项会导致清除目标仅清除pom.xml直接命名的依赖项。在构建时,Maven不仅会自动提取您的直接依赖关系,还会将所有的TRANSITIVE依赖关系下载到您的本地存储库中。
当清除目标正在寻找要删除的内容时,如果它在依赖项的poms中找到其他依赖项,它会遍历这些依赖项以找出可以清除的本地存储库中的整个树。要做到这一点,它至少需要传递项目的pom.xml。如果它无法在本地仓库中找到它,或者它认为可能有更新版本要分析,它将转到外部存储库来查找它。
我认为它实际上并没有尝试在开始清除之前下载完整的项目内容。但是,由于它至少会删除项目的pom.xml文件,如果它找不到就像它解析实际构建的依赖项那样会抱怨它。
除了防止Maven在清除时访问外部存储库,另一个实际原因是如果你有两个具有相同传递依赖性的项目,并且你不希望清除一个项目影响另一个项目的性能(因为后者将不得不再次下载任何遗漏的依赖项。)
另一方面,需要仔细考虑的是,如果您不允许清除考虑所有可传递的依赖关系,那么您将在本地存储库中保留一组您可能想要的下游依赖关系删除。
我可以说你输出的输出是不必要的,也可以用另一个标志“reportInaccessibleDependencies = false”来阻止。但除非它正在扼杀你的构建,否则我不会说有什么可担心的。