Экстернализация учетных данных 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>