Как получить значения сервера, определенные в настройках.xml, чтобы использовать их в моем pom.в XML?
Я знаю, что могу получить некоторые настройки.в XML параметры, использующие свойства, например ${settings.localRepository}
чтобы получить местоположение локального репозитория.
теперь представьте мое настройки.в XML содержит следующее определение серверов:
<servers>
<server>
<id>server-dev</id>
<username>devuser</username>
<password>devpass</password>
</server>
<server>
<id>server-hom</id>
<username>homuser</username>
<password>hompass</password>
</server>
</servers>
есть ли способ, предоставлена id
сервера, чтобы получить значение любого параметра? Например, что-то вроде ${settings.servers.server.server-dev.username}
вернутся devuser
.
Я уже пробовал следующий:
${settings.servers.server.server-dev.username}
${settings.servers.server-dev.username}
${settings.servers.server[server-dev].username}
${settings.servers[server-dev].username}
но ни один из них не работал...
об этом страница, это невозможно. Однако, поскольку это функция не правильно документирована, у меня все еще есть надежда сделать это таким образом...
5 ответов
Я не думаю, что это возможно, и считаю, что было бы плохой идеей, чтобы выявить значение этих свойств.
как поясняется в Ссылка На Настройки программа <servers>
на settings.xml
не распространять значения, такие как username
или password
вместе с pom.xml
. Поэтому предоставление свойств для чтения из любого места просто нарушит этот принцип и может быть проблемой безопасности.
EDIT: Я я снова думаю об этом, и то, что я сказал-неправда.
AFAIK, Maven не разоблачает username
и password
свойства сервера, определенные в настройках и / или предоставляют механизм, аналогичный тому, что описал OP. но было бы неплохо иметь доступ к ним из pom.xml
.
сказав это, как указал Рич, API Maven дает вам доступ к серверам, определенным в настройках (см. org.апаш.знаток.настройки.Настройки#getServer (строка serverId)) поэтому должно быть возможно установить свойства из Mojo (т. е. в пользовательском плагине).
но я на самом деле не уверен, что вы именно пытаетесь сделать и, возможно, используете <properties>
и профили были бы лучшим подходом. Работа с общими свойствами среды (но конкретными значениями) является хорошим вариантом использования профилей. Проверьте главы 11.5.1. Общие Среды и 11.5.2 Защита Секретов на Maven: Окончательное Руководство книги.
Если вы находитесь на Maven 3+, это может быть достигнуто с помощью серверы-maven-расширение. После регистрации, настройки.на содержимое xml / servers можно ссылаться с помощью ${settings.сервера.сервер..} (например, ${параметры.сервера.сервер.сервер-Дэв.имя пользователя.)}
раскрытие: я-хранитель проект.
Я не знаю простого способа сделать это. Но вы можете написать небольшой плагин и привязать его к ранней фазе, затем получить доступ к значениям настроек из плагина и либо использовать их непосредственно в плагине, либо выставить их как свойства.
вы можете увидеть, как читать значения из настроек, глядя на источник nexus-maven-плагин, и как установить их, глядя на свойства-maven-плагин
возможность 1 С плагин GMaven. Вы можете легко получить доступ к настройкам сервера, как:
<source>
def server = settings.servers.find{ it.id.equals('server-hom') }
а затем поместите его в общие свойства
project.properties.srvuser = server.username
</source>
на следующих этапах вы можете получить доступ к свойствам из POM, как всегда:
${srvuser}
вариант 2 будет определять свойства в настройках.в XML, как показано здесь. Не берется из настроек сервера, но из некоторых свойств на основе профиля.
в любом случае Я считаю, что Maven должен вытащить все настройки сервера по умолчанию.
как описано в:
лучший способ-это:
<settings>
<profiles>
<profile>
<activeByDefault>true</activeByDefault>
<properties>
<environment.type>prod</environment.type>
<database.password>m1ss10nimp0ss1bl3</database.password>
</properties>
</profile>
</profiles>
</settings>