Запутался, что порядок имеет значение при определении условных профилей в Maven - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть настраиваемое свойство line.ending , которое я использовал на этапе сборки здания моего проекта, чтобы указать тип окончания строки в файлах свойств моего приложения.Для этого я создал два профиля LF_DOS и LF_UNIX , чтобы при запуске:

mvn install 

или

mvn install -P LF_DOS

line.ending равно 'dos', и когда я запускаю:

mvn install -P LF_UNIX

line.ending равно 'unix'.

Моя первая попыткасделать это было просто:

    <profile>
        <id>LF_UNIX</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <line.ending>unix</line.ending>
        </properties>
    </profile>
    <profile>
        <id>LF_DOS</id>
        <activation>
            <property>
                <name>!line.ending</name>
            </property>
        </activation>
        <properties>
            <line.ending>dos</line.ending>
        </properties>
    </profile>

К сожалению, это всегда давало мне line.ending = dos , независимо от того, установлен LF_UNIX или нет.Странно ... Но, что меня больше смущает, так это то, что я решил проблему, просто изменив порядок объявления профиля, например:

    <profile>
        <id>LF_DOS</id>
        <activation>
            <property>
                <name>!line.ending</name>
            </property>
        </activation>
        <properties>
            <line.ending>dos</line.ending>
        </properties>
    </profile>
    <profile>
        <id>LF_UNIX</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <line.ending>unix</line.ending>
        </properties>
    </profile>

Это работает точно так, как я хочу.

Мои вопросы: это ошибка?Или это что-то, что нужно знать о профилях Maven, своего рода ограничение, которое делает объявление заказа профилей особенно важным в таком случае?

1 Ответ

1 голос
/ 24 февраля 2012

Путаница заключается в том, что вы понимаете, как работает активация профиля.

Вы думаете, что это:

<activation>
  <property>
    <name>!line.ending</name>
  </property>
</activation>

означает, что если у меня не установлено свойство maven с именем line.ending, активируйте этот профиль. Что это действительно означает, если я не указал -Dline.ending = X в командной строке, активируйте этот профиль. Так что, если вы не запустите что-то вроде этого:

mvn clean install -Dline.ending=unix

Вы активируете этот профиль и, таким образом, значение установлено в dos.

...