Как получить значения сервера, определенные в настройках.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 должен вытащить все настройки сервера по умолчанию.


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

Sonatype: Полная Ссылка 5.5.2

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

<settings>
    <profiles>
        <profile>
            <activeByDefault>true</activeByDefault>
            <properties>
                <environment.type>prod</environment.type>
                <database.password>m1ss10nimp0ss1bl3</database.password>
            </properties>
        </profile>
    </profiles>
</settings>