maven - 如何让 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
标志绝对没有区别。
解决方案
FWIW,我把这个 Maven 扩展放在一起,让我可以做我想做的事,通过在运行时向项目表示中添加额外的存储库:https ://github.com/veselov/mvn-project-default
启用和配置后,将查询私有存储库以获取 Maven 在执行期间需要提取的任何工件。
推荐阅读
- react-native - 如果位置为中心,则反应原生的浮动操作按钮中的图标不显示文本
- elasticsearch - 无法使用应用搜索(7.6.1)索引文档
- python-3.x - Pymunk发生碰撞时如何获得施加在身体上的力
- php - 使用页面标题生成选择选项
- ios - 使用 Appium 检索 iOS 模拟器的日志返回部分结果
- android - 我们如何获取双变量的值并在另一个活动中保存和设置文本?
- python - 如何在 Python 中将一年提前一天
- git - Git:将git跟踪的文件替换为另一个同名文件
- python - 使用 extract-msg 包读取 .msg 文件时出错
- javascript - 材质 UI 复选框 - 文本对齐