是否可以在命令行中在 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 的核心功能是允许变量替换 这是我试图阻止的事情,但它确实完成了工作。 关于<username>$internal.repo.username</username>
:你的意思是添加到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,例如install
换成deploy
吗?【参考方案3】:
这也有效:
<server>
<id>$repo.id</id>
<username>$repo.username</username>
<password>$repo.password</password>
</server>
【讨论】:
以上是关于是否可以在命令行中在 Maven Deploy 中传递密码?的主要内容,如果未能解决你的问题,请参考以下文章