Svn 使用Maven外部化SCM凭据

Svn 使用Maven外部化SCM凭据,svn,version-control,maven-2,maven-scm,Svn,Version Control,Maven 2,Maven Scm,是否有一种方法将我的SCM凭据外部化,以便它们不会存储在项目的POM中?问题是,如果它们包含在项目的POM中,那么在部署项目时,它们对所有人都是可见的。这可以为许多SCM提供程序完成,我假设Subversion是基于您的标记的实现 您可以在$user.home/.scm/svn-settings.xml(或[maven home]/conf/.scm/svn-settings.xml)中定义Subversion设置,尽管这意味着系统用户仍然可以看到这些设置) 在该文件中,您可以设置Subvers

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

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

[svn用户]
[svn密码]
您可以在该配置文件中定义一些其他属性。有关更多详细信息,请参阅的“提供程序配置”部分


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

对于某些SCM提供程序,您可以在
settings.xml
部分指定凭据。作为一个
,请使用存储库的域名。这在mercurial中对我有效。颠覆也有效

例如,给定my
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>
我意识到这个问题很老,答案也被接受,但为了完整起见,我想提供以下备选方案,在某些情况下可能更可取

动机 因此,有时同一台服务器用于多种用途,这需要不同的用户凭据。例如,它用于托管Nexus驱动的Maven存储库以及对同一用户具有不同凭据的SVN服务器。在这种情况下,需要有多个
条目具有相同的
id
用户名
,但不同的
密码
。然而,这是不可行的

解决方案 Maven release插件支持标志
username
password
,这些标志可以作为
release:prepare
release:perform
命令的一部分提供。
用户名
密码
的值应与相应的SVN凭据匹配

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

通过使用上面提供的解决方案,我成功地实现了这一点,即在我的settings.xml中添加一个新的服务器配置,并将域名作为id

<server>
  <id>domain.name:port</id>
  <username>[username]</username>
  <password>[password]</password>
</server>

域名:port
[用户名]
[密码]
除了前面的答案之外,如果要在URL中指定端口,还需要将其包含在server.id中。我发现的另一个怪癖是,如果密码包含任何可能干扰命令行调用的字符,则需要将其加引号

您不能在$user.home/.scm/svn-settings.xm中使用以下内容,因为它无效!
下没有
等元素(如规定)


[svn用户]
[svn密码]

Hi Rich,你的建议不起作用(至少对我来说是这样)。此外,在你的链接上没有用户名和密码。。。因此,必须有另一个解决方案…检查此:用户和密码在设置文件中不受支持。感谢丰富的链接!对我来说也不管用。Philippe的答案应该标记为“正确”。谢谢,这似乎也适用于svn。你知道这有没有记录在案吗?我不知道。我花了一段时间才找到它,我相信通过在网络上到处搜集信息。@Jörn Horstmann这在maven参考书的附录a.2.2中有描述,请参阅……正如@mudged指出的,端口号在这里很重要;因此,考虑到在同一主机(@01es)上运行的不同进程/服务器,请注意,这也适用于使用ssh的git。在我的例子中,我使用:
scm:git:ssh://git@bitbucket.org/{account}/{project}
,然后在my settings.xml中我使用
bitbucket.org/c/Users/neil.hunt/.ssh/id\u rsa
在命令中传递这些不是一个好主意,因为任何人都可以查看运行的进程来获取您的凭据。@Eddie您能推荐一个更好的替代方案吗?@Ev0oD-是,理想情况下使用Maven的内置加密,但在settings.xml中至少要有凭据
<server>
  <id>domain.name:port</id>
  <username>[username]</username>
  <password>[password]</password>
</server>
<svn-settings>
  <user>[svn user]</user>
  <password>[svn password]</password>
</svn-settings>