2

当我按照示例/教程中的说明配置scmchangelog-plugin并运行站点生成时,我设置的用户名和密码将被忽略。

文档说可以在插件配置中配置用于访问 SCM 的用户名和密码。这看起来像这样:

<reporting>
 <plugins>
  <plugin> 
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>scmchangelog-maven-plugin</artifactId>
   <version>1.3</version>
   <configuration>
    <grammar>REMY</grammar>
    <connectionUrl>scm:svn:svn+ssh://repo.lan/repo/project/trunk</connectionUrl>
    <username>user</username>
    <password>password</password>
   </configuration>
  </plugin>
 </plugins>
</reporting>

当我运行站点生成(mvn 站点)时,命令行上的输出显示

[INFO] Executing: /bin/sh -c cd /tmp && svn --username user --password '*****' 
--non-interactive list --xml svn+ssh://repo.lan/repo/project/tags/

但是仍然提示我输入密码,并且用于访问 SCM 的用户是运行 mvn 命令的用户。

有什么想法可能是错的吗?

更新:

我现在将问题追踪到 svn 命令行客户端。

问题是,当我运行如下命令时

svn list --username foo --password bar --non-interactive svn+ssh://host/repo/project

命令行工具似乎忽略了给定的选项。我仍然被询问密码,用于访问 URL 的用户是执行命令的用户,而不是选项中设置的用户。

我在这里使用 svn 版本 1.4.6。

有什么想法可能会出错吗?

4

3 回答 3

3

您是说Maven SCM 插件scm:changelog的目标吗?如果是这种情况,您有两个选择来确保 SCM 传递您的凭据。

首选方法

一些SCM 提供程序允许您在 M2_HOME/conf/.scm 下指定一个设置文件,例如 Subversion 是 svn-settings.xml 而 CVS 是 cvs-settings.xml

您的 SCM 提供商应定义如何定义配置设置。对于 Subversion,我最终得到一个像这样的文件:

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

如果需要,您可以通过将命令行参数传递给文件来指定另一个位置的 SCM 设置文件:

-Dmaven.scm.svn.config_directory=your_configuration_directory

其他方法

另一个(不受欢迎的)选项是配置scmPOM 的部分,以便 url 包含用户名和密码。它的实现是特定于提供者的,但通常与这个 Subversion 示例的形式相似:

scm:svn:http://[user]:[password]@host/path

所以你在 POM 中的 scm 部分看起来像这样:

<scm>
  <connection>scm:svn:http://[user]:[password]@host/path</connection>
  <developerConnection>
    scm:svn:http://[user]:[password]@host/path
  </developerConnection>
  <url>http://somerepository.com/viewsvn</url>
</scm>

这显然是不可取的,因为您的 SCM 凭据最终会出现在您安装的 POM 中,在我看来,您真的应该只使用它来测试连接。有关详细信息,请参阅SCM URL 格式页面和特定SCM 提供商的详细信息

于 2009-09-30T11:10:58.123 回答
3

这是一个已知的错误。正确的行为是显示一个错误,指出在使用 SSH 等外部身份验证机制时不支持--usernameand选项,而不是默默地忽略这些选项。--password

要解决您的问题,请将您的“foo”用户名作为 URL 的一部分传递:

svn+ssh://foo@host/repo/project

并使用ssh-agent 之类的东西来缓存您的凭据,从而避免密码提示。

于 2009-10-01T13:07:11.970 回答
1

检查是否有别名破坏了您对“svn”命令的使用。

还要检查目标主机是否允许密码模式身份验证。可能还值得检查一下桌面是否没有使用一些方便的“密钥环代理”,这些可能会干扰 svn+ssh。

于 2009-10-01T12:37:36.507 回答