Свойства профиля Maven не переопределяются - PullRequest
12 голосов
/ 16 февраля 2012

У меня есть многомодульный проект Maven с такой структурой:

родитель-П-проект

- модуль1

- модуль2

В проекте parent-pom у меня есть такой pom.xml

    <modules>
        <module>module1</module>
    </modules>
...
    <profiles>
        <profile>
           <id>local</id>
           <properties>
               <prop>local_prop</prop>
           </properties>
        </profile>
        <profile>
           <id>test</id>
           <modules>
                <module>module2</module>
           </modules>
           <properties>
               <prop>test_prop</prop>
           </properties>
        </profile>
    </profiles>

Во всех файлах pom.xml у меня есть такой тег:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

В module1 и module2 в каталоге resource у меня есть файлы свойств с таким текстом:

prop=${prop}

Проблема в том, что после

mvn clean install

или

mvn clean install -Ptest

или даже

mvn clean install -P test

Я получаю

проп = local_prop

Если я тестирую профиль пользователя для сборки, то модуль2 также создается, но свойства используются из локального профиля. Я использую Maven 3.0.3. У кого-нибудь есть идеи?

Ответы [ 5 ]

8 голосов
/ 17 февраля 2012

Вы можете попробовать использовать команду mvn help :ffective-pom -Ptest , чтобы увидеть параметры, используемые в вашей сборке.

Подробнее см. http://maven.apache.org/plugins/maven-help-plugin/plugin-info.html.

5 голосов
/ 19 февраля 2012

Добавьте ${basedir} перед вашими каталогами ресурсов:

<directory>${basedir}/src/main/resources</directory>

Это должно решить вашу проблему.Я объяснил бы, что в многомодульном проекте он неправильно выбирает путь (для дочернего модуля), если вы строите с верхнего уровня.Таким образом, при попытке фильтрации он применяет его к другому каталогу (фактическому агрегатору корневого уровня) вместо дочернего.

Надеюсь, это поможет.

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

Я решаю проблему, удаляя текущий плагин maven для затмения, и использую другой. Теперь я использую это: - Интеграция Maven: http://m2eclipse.sonatype.org/sites/m2e - Интеграция Maven для WTP: http://m2eclipse.sonatype.org/sites/m2e-extras/

Раньше я использовал это http://download.eclipse.org/technology/m2e/releases/. Я не могу объяснить такое поведение, но, возможно, некоторая конфигурация была изменена плагином.

0 голосов
/ 11 мая 2016

Несмотря на то, что у меня была старая проблема, я не нашел здесь решения. Для меня проблема была в Eclipse, который я использую параллельно с mvn в командной строке. Eclipse немедленно вызвал process-resources после того, как я сделал это в командной строке.

Таким образом, решением было выбрать профиль в Eclipse (Project-> Maven-> Select Maven Profiles).

0 голосов
/ 17 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...