Свойства профиля Maven не являются "переопределяющими",

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

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

- module1

- module2

В родительском-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 в каталоге ресурсов у меня есть файлы свойств с таким текстом:

prop=${prop}

Проблема заключается в том, что после

mvn clean install

или

mvn clean install -Ptest

или даже

mvn clean install -P test

Я получаю

проп = local_prop

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

Ответ 1

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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