Те же имена профилей в настройках Maven и POM

Это мой первый день использования профилей сборки Maven. У меня есть профили в следующих файлах:

  1. пом.xml
  2. Настройки Maven (%USER_HOME%/.m2/settings.xml)

Ради любопытства я создал один профиль в обоих файлах с одинаковым идентификатором (local_deploy), разница только в одном свойстве (например, tomcat.pwd).

Профиль в POM выглядит следующим образом:

<profile>
        <id>local_deploy</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <tomcat.host>localhost</tomcat.host>
            <tomcat.port>8080</tomcat.port>
            <tomcat.url>http://${tomcat.host}:${tomcat.port}/manager/text</tomcat.url>
            <tomcat.user>admin</tomcat.user>
            <tomcat.pwd>admin</tomcat.pwd>
        </properties>
    </profile>

Профиль в настройках Maven выглядит следующим образом:

<profile>
    <id>local_deploy</id>
    <properties>
      <tomcat.host>localhost</tomcat.host>
      <tomcat.port>8080</tomcat.port>
      <tomcat.url>http://${tomcat.host}:${tomcat.port}/manager/text</tomcat.url>
      <tomcat.user>admin</tomcat.user>
      <tomcat.pwd>wrongpwd</tomcat.pwd>
    </properties>
  </profile>

Обратите внимание, что профиль в настройках Maven не указан в <activeProfiles>.

Когда я пытаюсь установить свое приложение, используя следующую команду

mvn clean install -P local_deploy help:active-profiles

Мое приложение развертывается со следующим выводом на консоль:

The following profiles are active:
local_deploy (source: external)
local_deploy (source: <my groupId>:<my artifactId><version>)

Я просматриваю эту документацию, и в ней говорится, что

Take note that profiles in the settings.xml takes higher priority than profiles in the POM

Итак, я предполагаю, что мое развертывание должно было завершиться неудачей из-за неправильного пароля в настройках Maven. Что мне здесь не хватает?


person Atul Kumbhar    schedule 10.12.2015    source источник
comment
Какую версию maven 3 вы используете?   -  person A_Di-Matteo    schedule 12.12.2015
comment
Я пробовал maven 3.1.1 и 3.3.9, и действительно, профиль настроек всегда переопределяет свойства профиля с тем же именем в образце pom. Итак, документация верна. Получили ли вы дополнительную информацию о поведении, о котором вы сообщили?   -  person A_Di-Matteo    schedule 15.12.2015
comment
Итак, у вас были одинаковые идентификаторы профилей, и оба они активны?   -  person Atul Kumbhar    schedule 16.12.2015
comment
Была ли у вас возможность попробовать код, опубликованный в моем ответе, или просмотреть это поведение?   -  person A_Di-Matteo    schedule 19.12.2015
comment
@А. Ди Маттео, спасибо за подробный ответ. Вы правы, предпочтение отдается профилю в settings.xml. Я убедился в этом после переустановки установки. Извините за поздний ответ, я просто пытался выяснить, что пошло не так с моей предыдущей настройкой. В любом случае, оказывается, я менял пароль администратора tomcat не в том месте. Плагин tomcat-maven использует сервер, настроенный (в глубине души) в settings.xml, который я по ошибке проигнорировал. еще раз спасибо.   -  person Atul Kumbhar    schedule 21.12.2015


Ответы (1)


Вот образец pom, который я использовал:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample</groupId>
    <artifactId>profiles-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>print-hello</id>
                        <phase>test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <property name="msg" value="${hello}" />
                                <property name="msg2" value="${hello2}" />
                                <echo message="hello from build: ${msg}, ${msg2}" />
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>p2</id>
            <properties>
                <hello>from-pom</hello>
                <hello2>from-pom-again</hello2>
            </properties>
        </profile>
    </profiles>
</project>

Определение в моих настройках:

<profile>
    <id>p2</id>
    <properties>
        <hello>from-settings</hello>
    </properties>
</profile>

Итак, обратите внимание: два профиля с одинаковым именем, по POM и настройкам, определяющим одно и то же свойство hello. Однако тот, что в POM, определяет одно дополнительное свойство, hello2.

Затем запустив:

mvn test -Pp2 help:active-profiles

Я получил как часть вывода сборки:

[INFO] --- maven-antrun-plugin:1.5:run (print-hello) @ profiles-sample ---
[INFO] Executing tasks

main:
     [echo] hello from build: from-settings, from-pom-again
[INFO] Executed tasks
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building profiles-sample 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-help-plugin:2.2:active-profiles (default-cli) @ profiles-sample ---
[INFO] 
Active Profiles for Project 'com.sample:profiles-sample:jar:0.0.1-SNAPSHOT': 

The following profiles are active:

 - p2 (source: external)
 - p2 (source: com.sample:profiles-sample:0.0.1-SNAPSHOT)

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Итак, из Maven Help Plugin мы фактически знаем, что оба профиля были активны, и это правда, потому что в составе Antrun мы получили оба свойства (hello из профиля настроек и hello2 из профиля pom).
Следовательно, два профиля были активны одновременно, их свойства были объединены (поскольку hello имеет одно и то же имя), свойство из настроек имело приоритет над свойством из POM, затем дополнительное свойство POM правильно попало в также.

Итак, я не мог воспроизвести сценарий, который вы упомянули. Я бы предложил перепроверить настройки и pom и добавить дополнительное свойство для игры.

person A_Di-Matteo    schedule 16.12.2015