有没有办法将我的 SCM 凭据外部化,这样它们就不会存储在项目的 POM 中?问题是如果它们包含在项目的 POM 中,那么在部署项目时它们将对所有人可见。
4 回答
对于某些 SCM 提供商,您可以<servers>
在settings.xml
. 作为<id>
使用存储库的域名。这对我有用。SubVersion 也可以。
例如,给定我的pom.xml
包含:
<scm>
<connection>scm:hg:http://jukito.googlecode.com/hg/</connection>
<developerConnection>scm:hg:https://jukito.googlecode.com/hg/</developerConnection>
<url>http://code.google.com/p/jukito/source/browse/</url>
</scm>
然后我可以这样指定我的凭据settings.xml
:
<server>
<id>jukito.googlecode.com</id>
<username>philippe.beaudoin</username>
<password>1234567890ABC</password>
</server>
我意识到这个问题已经过时并且答案已被接受,但为了完整起见,我想提供以下替代方案,这在某些情况下可能是首选。
动机
有时会发生相同的服务器用于多种目的,这需要不同的用户凭据。例如,它用于托管 Nexus 驱动的 Maven 存储库以及对同一用户具有不同凭据的 SVN 服务器。在这种情况下,需要有多个<server>
条目具有相同的id
and username
,但不同的password
。然而,这是不可行的。
解决方案
Maven 发布插件支持标志username
,password
可以作为release:prepare
andrelease:perform
命令的一部分提供。的值应该username
与password
各自的 SVN 凭证相匹配。
mvn release:prepare -Dusername=[username] -Dpassword=[password]
这可以为许多 SCM 提供程序完成,我假设 Subversion 是基于您的标签的实现。
您可以在 $user.home/.scm/svn-settings.xml(或 [maven home]/conf/.scm/svn-settings.xml,尽管这意味着它们仍然对系统)
在该文件中,您可以设置 Subversion 服务器的用户名和密码。文件内容应如下所示:
<svn-settings>
<user>[svn user]</user>
<password>[svn password]</password>
</svn-settings>
您可以在该配置文件中定义一些其他属性。有关详细信息,请参阅Subversion SCM 页面的“提供程序配置”部分。
其他 SCM 提供程序也有类似的方法,例如在 CVS 中,设置存储在同一位置(.scm 文件夹)的 cvs-settings.xml 中,有关详细信息,请参阅CVS SCM 页面。
我已经设法通过使用上面提供的解决方案来实现这一点,即将新的服务器配置添加到我的 settings.xml 并将域名作为 id。
<server>
<id>domain.name:port</id>
<username>[username]</username>
<password>[password]</password>
</server>
除了上一个答案之外,如果您在 URL 中指定端口,则还需要将其包含在 server.id 中。我发现的另一个怪癖是,如果密码包含任何可能干扰命令行调用的字符,则需要将密码放在引号中。
您不能在 $user.home/.scm/svn-settings.xm 中使用以下内容,因为它无效!没有<user>
和<password>
下面这样的元素(如此处<svn-settings>
指定)
<svn-settings>
<user>[svn user]</user>
<password>[svn password]</password>
</svn-settings>