如何让Maven运行从第三方存储库下载的插件



使用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

结果为:

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

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

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

[ERROR] Plugin com.excelfore:appshack-maven-plugin:4.2133-RC1或其依赖项之一无法解决:无法在脱机模式下访问central (https://repo.maven.apache.org/maven2),并且工件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标志绝对没有区别。

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

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

最新更新