Свойства профиля 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/. Я не могу объяснить такое поведение, но может быть, какая-то конфигурация была изменена плагином.
Ответ 2
Вы можете попытаться использовать команду mvn help: effective-pom -Ptest, чтобы увидеть параметры, используемые в вашей сборке.
Подробнее см. http://maven.apache.org/plugins/maven-help-plugin/plugin-info.html.
Ответ 3
Добавьте ${basedir}
перед вашими каталогами ресурсов:
<directory>${basedir}/src/main/resources</directory>
Это должно решить вашу проблему. Мое объяснение было бы в том, что в многомодульном проекте он не правильно выбирает путь (для дочернего модуля), если вы строите с верхнего уровня. Таким образом, при попытке фильтрации он применяет его к другому каталогу (фактическому агрегатору на уровне корневого уровня) вместо дочернего.
Надеюсь, это поможет.
Ответ 4
Я не могу понять, как maven может разрешить ваше свойство, если вы не укажете какой-либо профиль. Итак, чтобы увидеть, что на самом деле там, я пробовал себя, следуя именно схеме, которую вы описали, и... Я не испытывал проблем, которые у вас есть. В вашем случае это действительно ведет себя, как если бы свойство было определено вне профиля, - предположил Бугске. Что произошло, если вы временно прокомментируете оба профиля?
Ответ 5
Несмотря на то, что у меня была такая же проблема, я не нашел решение здесь. Для меня проблема была Eclipse, которую я использую параллельно с mvn в командной строке. Eclipse мгновенно назвал процессы-ресурсы после того, как я это сделал в командной строке.
Таким образом, решение заключалось в том, чтобы выбрать профиль в Eclipse (Project- > Maven- > Select Maven Profiles).