首页 > 解决方案 > 如何让 Maven 运行从 3rd 方存储库下载的插件

问题描述

使用 Maven 3.8.2

我有一个从自定义 Maven 存储库下载的插件:

$ mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.2:get \
-DremoteRepositories=excelfore.private::::https://some_url \
-Dartifact=com.excelfore:appshack-maven-plugin:4.2133-RC1:maven-plugin
...
[INFO] BUILD SUCCESS

现在我只想运行插件:

$ mvn -e com.excelfore:appshack-maven-plugin:4.2133-RC1:run-self-test

结果是:

[错误] 插件 com.excelfore:appshack-maven-plugin:4.2133-RC1 或其依赖项之一无法解析:未能在https://中找到 com.excelfore:appshack-maven-plugin:jar:4.2133-RC1 repo.maven.apache.org/maven2被缓存在本地仓库,直到中央的更新间隔已经过去或强制更新才会重新尝试解析 -> [帮助1]

我如何告诉 Maven 只使用它之前下载的文件?

我试过-o了,这只是更改为:

[错误] 插件 com.excelfore:appshack-maven-plugin:4.2133-RC1 或其依赖项之一无法解决:无法在离线模式下访问中央 ( https://repo.maven.apache.org/maven2 ) 和artifact com.excelfore:appshack-maven-plugin:jar:4.2133-RC1 之前没有下载过。-> [帮助 1]

-npu似乎没有做任何事情,它显示有关此选项已弃用的警告,并且错误是相同的。

使用-X我可以看到这些消息:

[DEBUG] Using local repository at /home/vps/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /home/vps/.m2/repository
[INFO] Scanning for projects...
[DEBUG] Extension realms for project org.apache.maven:standalone-pom:pom:1: (none)
[DEBUG] Looking up lifecycle mappings for packaging pom from ClassRealm[plexus.core, parent: null]
[DEBUG] Verifying availability of /home/vps/.m2/repository/com/excelfore/appshack-maven-plugin/4.2133-RC1/appshack-maven-plugin-4.2133-RC1.pom from [central (https://repo.maven.apache.org/maven2, default, releases)]
[WARNING] The POM for com.excelfore:appshack-maven-plugin:jar:4.2133-RC1 is missing, no dependency information available
[DEBUG] Verifying availability of /home/vps/.m2/repository/com/excelfore/appshack-maven-plugin/4.2133-RC1/appshack-maven-plugin-4.2133-RC1.jar from [central (https://repo.maven.apache.org/maven2, default, releases)]

当然所有文件都在那里,我什至验证了 SHA1 总和匹配:

[vps@hornet]~$ ll ~/.m2/repository/com/excelfore/appshack-maven-plugin/4.2133-RC1/
-rw-rw-r--. 1 vps 317291 Aug 19 12:43 appshack-maven-plugin-4.2133-RC1.jar
-rw-rw-r--. 1 vps    341 Aug 19 12:43 appshack-maven-plugin-4.2133-RC1.jar.lastUpdated
-rw-rw-r--. 1 vps     40 Aug 19 12:43 appshack-maven-plugin-4.2133-RC1.jar.sha1
-rw-rw-r--. 1 vps   3248 Aug 19 12:43 appshack-maven-plugin-4.2133-RC1.pom
-rw-rw-r--. 1 vps    341 Aug 19 12:43 appshack-maven-plugin-4.2133-RC1.pom.lastUpdated
-rw-rw-r--. 1 vps     40 Aug 19 12:43 appshack-maven-plugin-4.2133-RC1.pom.sha1
-rw-rw-r--. 1 vps    252 Aug 19 12:43 _remote.repositories

似乎我错过了一些愚蠢的东西,似乎有时这工作得很好,但我经常碰到这堵砖墙。我希望 Maven 不会尝试同步已成功下载的工件。

我认为问题是 Maven 在运行插件时不知道私有存储库,但我需要在任何项目之外运行它(即没有 POM 文件),并且 AFAIU,无法在~/.m2/settings.xml(只有服务器,这无济于事)。

然而,更奇怪的是,这适用于快照。

$ mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.2:get \
 -DremoteRepositories=excelfore.private::::https://some_url \
 -Dartifact=com.excelfore:appshack-maven-plugin:4.2132-SNAPSHOT:maven-plugin
...
[INFO] BUILD SUCCESS

$ /opt/maven/apache-maven-3.8.2/bin/mvn -X \
com.excelfore:appshack-maven-plugin:4.2132-SNAPSHOT:run-self-test
...
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /home/vps/.m2/repository
[INFO] Scanning for projects...
[DEBUG] Extension realms for project org.apache.maven:standalone-pom:pom:1: (none)
[DEBUG] Looking up lifecycle mappings for packaging pom from ClassRealm[plexus.core, parent: null]
[DEBUG] Could not find metadata com.excelfore:appshack-maven-plugin:4.2132-SNAPSHOT/maven-metadata.xml in local (/home/vps/.m2/repository)
[DEBUG] Could not find metadata com.excelfore:appshack-maven-plugin:4.2132-SNAPSHOT/maven-metadata.xml in local (/home/vps/.m2/repository)
[DEBUG] Could not find metadata com.excelfore:appshack:4.2132-SNAPSHOT/maven-metadata.xml in local (/home/vps/.m2/repository)
[DEBUG] === REACTOR BUILD PLAN ================================================
[DEBUG] Project: org.apache.maven:standalone-pom:pom:1
[DEBUG] Tasks:   [com.excelfore:appshack-maven-plugin:4.2132-SNAPSHOT:run-self-test]

从调试输出来看,它不会对快照进行这种“可用性验证”。但是,使用-U标志绝对没有区别。

标签: mavenmaven-3maven-plugin

解决方案


FWIW,我把这个 Maven 扩展放在一起,让我可以做我想做的事,通过在运行时向项目表示中添加额外的存储库:https ://github.com/veselov/mvn-project-default

启用和配置后,将查询私有存储库以获取 Maven 在执行期间需要提取的任何工件。


推荐阅读