35

有没有办法将我的 SCM 凭据外部化,这样它们就不会存储在项目的 POM 中?问题是如果它们包含在项目的 POM 中,那么在部署项目时它们将对所有人可见。

4

4 回答 4

62

对于某些 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>
于 2011-01-25T08:50:23.400 回答
24

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

动机

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

解决方案

Maven 发布插件支持标志usernamepassword可以作为release:prepareandrelease:perform命令的一部分提供。的值应该usernamepassword各自的 SVN 凭证相匹配。

mvn release:prepare -Dusername=[username] -Dpassword=[password] 
于 2012-03-06T12:56:57.850 回答
5

这可以为许多 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 页面

于 2009-08-10T15:37:06.287 回答
4

我已经设法通过使用上面提供的解决方案来实现这一点,即将新的服务器配置添加到我的 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>
于 2013-01-31T13:31:11.417 回答