是否有一种外部化我的SCM凭证的方法,因此它们不会存储在项目的POM中?问题是,如果它们包含在项目的POM中,那么在部署项目时,所有人都可以看到它们。
答案 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>
条目具有相同的id
和username
,但不同的password
。然而,这是不可行的。
Maven发布插件支持可以作为username
和password
命令的一部分提供的标记release:prepare
和release:perform
。 username
和password
的值应与相应的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>