使用Maven外部化SCM凭据

时间:2009-08-10 15:33:29

标签: svn version-control maven-2 maven-scm

是否有一种外部化我的SCM凭证的方法,因此它们不会存储在项目的POM中?问题是,如果它们包含在项目的POM中,那么在部署项目时,所有人都可以看到它们。

4 个答案:

答案 0 :(得分:58)

对于某些SCM提供商,您可以在<servers>的{​​{1}}部分指定您的凭据。作为settings.xml使用您的存储库的域名。这对我来说很有用。 SubVersion也可以。

例如,鉴于我的<id>包含:

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

答案 1 :(得分:20)

我意识到这个问题已经过时了,答案已被接受,但为了完整起见,我想提供以下备选方案,在某些情况下可能更受欢迎。

动机

有时会发生同一台服务器用于多种用途,这需要不同的用户凭据。例如,它用于托管Nexus驱动的Maven存储库以及为同一用户具有不同凭据的SVN服务器。在这种情况下,需要有多个<server>条目具有相同的idusername,但不同的password。然而,这是不可行的。

解决方案

Maven发布插件支持可以作为usernamepassword命令的一部分提供的标记release:preparerelease:performusernamepassword的值应与相应的SVN凭据匹配。

mvn release:prepare -Dusername=[username] -Dpassword=[password] 

答案 2 :(得分:6)

这可以为许多SCM提供商完成,我假设Subversion是基于你的标签的实现。

您可以在$ user.home / .scm / svn-settings.xml(或[maven home] /conf/.scm/svn-settings.xml)中定义Subversion设置,但这意味着它们仍然可见给系统的用户)

在该文件中,您可以设置Subversion服务器的用户名和密码。文件内容应如下所示:

<svn-settings>
  <user>[svn user]</user>
  <password>[svn password]</password>
</svn-settings>

您可以在该配置文件中定义其他一些属性。有关详细信息,请参阅Subversion SCM page的“提供商配置”部分。

其他SCM提供程序有类似的方法,例如在CVS中,设置存储在cvs-settings.xml中的相同位置(.scm文件夹),有关详细信息,请参阅CVS SCM page

答案 3 :(得分:3)

我已经设法通过使用上面提供的解决方案来实现这一点,即将新的服务器配置添加到我的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>这样的元素(指定here

<svn-settings>
  <user>[svn user]</user>
  <password>[svn password]</password>
</svn-settings>