Как получить значения сервера, определенные в settings.xml, чтобы использовать их в моем pom.xml? - PullRequest
7 голосов
/ 13 октября 2009

Я знаю, что могу получить некоторые settings.xml параметры, используя свойства, такие как, например, ${settings.localRepository}, чтобы получить местоположение локального репозитория.

Теперь представьте, что мой settings.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 ]

12 голосов
/ 03 апреля 2013

Если вы используете Maven 3+, это может быть достигнуто с помощью servers-maven-extension . После регистрации на содержимое settings.xml / servers можно ссылаться с помощью $ {settings.servers.server. <Идентификатор сервера>. } (например, $ {settings.servers.server.server-dev.username}).

раскрытие: я поддерживаю проект.

4 голосов
/ 13 октября 2009

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

Как объясняется в Справочнике настроек , смысл <servers> в settings.xml состоит в том, чтобы не распределять такие значения, как username или password вместе с pom.xml. Поэтому предоставление свойств для их чтения из любого места просто нарушит этот принцип и может стать проблемой безопасности.

РЕДАКТИРОВАТЬ: Я снова думаю об этом, и то, что я сказал, не соответствует действительности.

AFAIK, Maven не раскрывает свойства username и password сервера, определенные в настройках, и / или не предоставляет механизм, аналогичный описанному в OP. Но было бы неправильно иметь доступ к ним с pom.xml.

С учетом сказанного, как указал Рич, API Maven предоставляет вам доступ к серверам, определенным в настройках (см. org.apache.maven.settings.Settings # getServer (String serverId) ), поэтому должна быть возможность устанавливать свойства из Mojo (т.е. в пользовательском плагине).

Но на самом деле я не уверен, что именно вы пытаетесь сделать, и, возможно, лучше использовать <properties> и профили. Работа с общими свойствами среды (но с конкретными значениями) - хороший пример использования профилей. Проверьте главы 11.5.1. Общие среды и 11.5.2 Защита секретов Maven: полное руководство книга.

1 голос
/ 13 октября 2009

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

Вы можете увидеть, как читать значения из настроек, посмотрев на источник nexus-maven-plugin , и как установить их, посмотрев на properties-maven-plugin

0 голосов
/ 16 марта 2015

Как описано в:

Сонатип: Полная справка 5.5.2

Лучший способ это:

<settings>
    <profiles>
        <profile>
            <activeByDefault>true</activeByDefault>
            <properties>
                <environment.type>prod</environment.type>
                <database.password>m1ss10nimp0ss1bl3</database.password>
            </properties>
        </profile>
    </profiles>
</settings>
0 голосов
/ 28 июня 2012

Возможность 1 будет использовать Плагин GMaven . Вы можете легко получить доступ к настройкам сервера, например:

<source>
    def server = settings.servers.find{ it.id.equals('server-hom') }

, а затем положить его в общие свойства

    project.properties.srvuser = server.username
</source>

На следующих этапах вы не можете получить доступ к свойствам из POM, как всегда:

${srvuser}

Возможность 2 будет определять свойства в файле settings.xml, как показано здесь . Он берется не из настроек сервера, а из некоторых свойств профиля.

В любом случае Я считаю, что по умолчанию Maven должен включить все настройки сервера.

...