Есть ли способ для экстернализации моих учетных данных SCM, чтобы они не были сохранены в POM проекта? Проблема заключается в том, что если они содержатся в проекте POM, они будут видны всем при развертывании проекта.
Внешние учетные данные SCM с Maven
Ответ 1
Это можно сделать для многих поставщиков 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 для деталей.
Ответ 2
Для некоторых поставщиков 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>
Ответ 3
Я понимаю, что этот вопрос старый, и ответы приняты, но для полноты хотелось бы предложить следующую альтернативу, которая может быть предпочтительной в некоторых случаях.
Мотивация
Иногда случается так, что один и тот же сервер используется для нескольких целей, для чего требуются разные учетные данные пользователя. Например, он используется для размещения репозитория Maven, управляемого Nexus, а также SVN-сервера, который имеет разные учетные данные для одного и того же пользователя. В таких случаях должно быть несколько записей <server>
с теми же id
и username
, но разными password
. Это, однако, нецелесообразно.
Решение
Плагин релиза Maven поддерживает флаги username
и password
, которые могут предоставляться как часть команд release:prepare
и release:perform
. Значения для username
и password
должны соответствовать соответствующим учетным данным SVN.
mvn release:prepare -Dusername=[username] -Dpassword=[password]
Ответ 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, поскольку это неверно! В <svn-settings>
нет таких элементов, как <user>
и <password>
(как указано здесь)
<svn-settings>
<user>[svn user]</user>
<password>[svn password]</password>
</svn-settings>