从命令行执行依赖插件时如何使maven使用凭据

How to make maven use credentials when executing dependency plugin from command line

我有一个私有 Maven 存储库。它在项目

的 pom.xml 中定义
    <repository>
        <id>some.id</id>
        <url>https://some.host/artifactory/some.id</url>
    </repository>

在我的 ~/.m2/settings.xml 中,我有正确的身份验证块:

    <server>
        <id>some.id</id>
        <username>pawel.veselov@domain.com</username>
        <password>{some-fancy-password-hash-goes-here}</password>
    </server>

在构建项目时,Maven 能够毫无问题地访问存储库,正如它应该的那样。在调试输出中,我可以看到它应用了凭据。

但是当我尝试直接下载工件时,Maven 似乎甚至没有考虑设置文件。

mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \
  -DremoteRepositories=some.id::::https://some.host/artifactory/some.id \
  -Dartifact=groupId:artifactId:1.1.1

用户名未传输。我可以在调试输出中看到,BasicRepositoryConnector 是在没有 username/password 组合的情况下调用的。

那么问题来了 - 是否可以调用插件,以便执行使 Maven 考虑使用其设置文件中规定的身份验证的任何进程?

当使用 remoteRepositories 属性 时,插件似乎没有使用保存的凭据。使用 repositoryId 进行的测试对我来说按预期工作。

mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get -DrepositoryId=some.id -Dartifact=groupId:artifactId:1.1.1

有效的 pom 必须包含存储库和 url 用于存储库。如果您打算 运行 在一个没有任何 pom.xml 的空目录中,那么您的存储库定义将需要移动到 settings.xml