【问题标题】:Is it possible to pass a password in Maven Deploy in the command line?是否可以在命令行中在 Maven Deploy 中传递密码?
【发布时间】: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

【问题讨论】:

    标签: java maven pom.xml


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多