是否可以在命令行中在 Maven Deploy 中传递密码?

Posted

技术标签:

【中文标题】是否可以在命令行中在 Maven Deploy 中传递密码?【英文标题】:Is it possible to pass a password in Maven Deploy in the command line? 【发布时间】:2015-03-20 05:41:03 【问题描述】:

这是它目前的工作方式,它是Maven Deploy Plugin Usage

pom.xml

[...]
  <distributionManagement>
    <repository>
      <id>internal.repo</id>
      <name>MyCo Internal Repository</name>
      <url>Host to Company Repository</url>
    </repository>
  </distributionManagement>
[...]

settings.xml

[...]
    <server>
      <id>internal.repo</id>
      <username>someUser</username>
      <password>somePassword</password>
    </server>
[...]

我想要实现的是找到一种在命令行中输入用户名和密码的方法。实现mvn deploy -someUser -somePassword

【问题讨论】:

【参考方案1】:

settings.xml 被认为是个人的,因此用户名+密码存储在 (user-)settings.xml 中。所以一般来说没有理由将它们作为参数传递。 (顺便说一句,密码可以在这里加密存储)maven-deploy-plugin 没有通过命令行传递它们的选项。但是,我见过这样的黑客攻击:

<username>$internal.repo.username</username>

现在你可以-Dinternal.repo.username=someUser

【讨论】:

我不知道我是否称其为 hack,Maven 的核心功能是允许变量替换 这是我试图阻止的事情,但它确实完成了工作。 关于&lt;username&gt;$internal.repo.username&lt;/username&gt;:你的意思是添加到settings.xml还是pom.xml 我说的是settings.xml 我正在使用 bitbucket 管道和公共 Docker 映像构建一个项目。由于各种原因,通过选项将用户名和密码传递给 mvn 会容易得多,如原始帖子中所述。有没有办法做到这一点?【参考方案2】:

我将在此处列出完整的解决方案,但基本上 Robert Scholte 的解决方案非常出色。

在您的~/.m2/settings.xml 中,您应该有以下内容

<settings>
    <servers>
        <server>
            <id>$repo.id</id>
            <username>$repo.login</username>
            <password>$repo.pwd</password>
        </server>
    </servers>
</settings>  

然后你就

mvn -Drepo.id=myRepo -Drepo.login=someUser -Drepo.pwd=somePassword clean install

您甚至可以使用您的环境变量(例如,如果您在远程服务器/容器上这样做):

mvn -Drepo.id=$REPO_ID -Drepo.login=$REPO_LOGIN -Drepo.pwd=$REPO_PWD clean install

【讨论】:

谢谢!我正在使用带有公开可用 Docker 文件的 bitbucket 管道来提供构建环境,因此我想避免将用户名和密码硬编码到 settings.xml 文件中。上面提出的解决方案应该很好用。 后续:我可以参数化 repo id,例如 $id(在 settings.xml 中)吗? 答案是“是”——存储库标识符也可以是一个参数。 我为此创建了一个方便的 docker 镜像。foldingstuff.tech/… 绝招!谢谢你。你能把install换成deploy吗?【参考方案3】:

这也有效:

<server>
  <id>$repo.id</id>
  <username>$repo.username</username>
  <password>$repo.password</password>
</server>

【讨论】:

以上是关于是否可以在命令行中在 Maven Deploy 中传递密码?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在命令行中添加 maven 存储库吗?

Sqlplus oracle:如何在 1 行中在 bash 上运行 sql 命令?

maven deploy -u -o 啥意思、

maven deploy和install的区别

Maven deploy怎么配置

Maven deploy 怎么配置