Экстернализация учетных данных SCM с Maven

Есть ли способ для экстернализации моих учетных данных SCM, чтобы они не сохранялись в POM проекта? Проблема в том, что если они содержатся в POM проекта, они будут видны всем при развертывании проекта.

4 ответа

Решение

Это может быть сделано для многих поставщиков SCM, я полагаю, что Subversion является реализацией, основанной на вашем теге.

Вы можете определить свои настройки 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 настройки хранятся в cvs-settings.xml в том же месте (папка.scm), подробности смотрите на странице CVS SCM.

Для некоторых поставщиков SCM вы можете указать свои учетные данные в <servers> раздел settings.xml, Как <id> используйте доменное имя вашего хранилища. Это работает для меня с Mercurial. 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>

Я понимаю, что этот вопрос старый и ответы принимаются, но для полноты картины я хотел бы предложить следующую альтернативу, которая может быть предпочтительнее в некоторых случаях.

мотивация

Иногда случается, что один и тот же сервер используется для нескольких целей, что требует разных учетных данных пользователя. Например, он используется для размещения репозитория Maven, управляемого Nexus, а также для сервера SVN с разными учетными данными для одного и того же пользователя. В таких случаях должно быть несколько <server> записи с одинаковыми id а также username, но разные password, Это, однако, не является жизнеспособным.

Решение

Плагин релиза Maven поддерживает флаги username а также password которые могут быть предоставлены как часть release:prepare а также release:perform команды. Значения для username а также password должен соответствовать соответствующим учетным данным SVN.

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

Мне удалось заставить это работать, используя решение, предоставленное выше, то есть добавление новой конфигурации сервера в мой файл settings.xml и присвоение имени домена в качестве идентификатора.

<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>
Другие вопросы по тегам