Как работает поддержка фильтрации IntelliJ Maven?
Я заметил, что при настройке проекта Maven на использование фильтрации свойств фильтрация свойств, похоже, также работает во время не-maven IntelliJ "make". Это означает, что конфигурации запуска IntelliJ для Jetty/Tomcat/GWT/Glassfish по-прежнему будут оценивать вашу фильтрацию ресурсов maven.
Итак, если я добавлю это в свой pom.xml
:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/persistence.xml</include>
</includes>
</resource> ....
Он должен фильтровать любые свойства в моих свойствах и файлы peristence.xml до начала любых запущенных конфигураций запуска. Это очень полезно для замены в ссылках JDBC или параметрах файловой системы.
Единственная проблема, с которой я сталкиваюсь, заключается в том, что IntelliJ, похоже, почитает фильтрацию в src/main/resources, даже если я изменяю pom.xml, чтобы иметь вторую запись для других каталогов (т.е. src/integrationtest/resources).
Все это кажется "автоматическим". Итак, как это работает и где (если где угодно) я могу его настроить?
Ответы
Ответ 1
IntelliJ IDEA Создание возможностей позволяет фильтровать ресурсы Maven. Однако IntelliJ IDEA еще не поддерживает фильтрацию веб-ресурсов.
источник: http://www.jetbrains.com/idea/webhelp/maven.html#compile
Никаких дополнительных подробностей об этой поддержке в целом inthelij webhelp, хотя, я думаю, она должна работать так же, как фаза процессов процесса maven.
Проблемы, которые возникают у вас, могут быть вызваны тем фактом, что каталог src/integrationtest/resources
не соответствует правилам maven.
Возможно, он будет работать, если вы:
- сделать его
src/test/resources/integrationtest/
или
- настроить maven на уважение
src/integrationtest
в качестве источников тестов (но если integrationtest
не является общеизвестным соглашением, это будет нарушение правила maven COC).
или
- сделать это еще одним модулем maven (sub), если вы хотите подчеркнуть выделение
integrationtest
Что касается фильтрации каталогов, отличающихся тем, что src/main/resources
: фильтрация src/main/webapp/META-INF
работала из-за-коробки для меня.
(Maven 3.0.4, Intellij 12.1.4)
Ответ 2
Хорошие новости, похоже, проблема будет исправлена в 13.1
http://youtrack.jetbrains.com/issue/IDEA-25934
РЕДАКТИРОВАТЬ: Извините, если не достаточно ясно, ошибка была отмечена как "исправлена" без дальнейших объяснений...
Но я тестировал в версии 13.1 EAP (сборка 134.1445), и, хотя ранее IntelliJ перезаписывал ресурсы, теперь он сохраняет веб-ресурсы, отфильтрованные Maven.
Ответ 3
Intellij (я использую 14.1) позволяет вам определять пользовательские задачи Ant как предварительную/пост-обработку во время сборки артефакта.
Перейдите к закладке Структура проекта → Артефакты → {выберите артефакт} → {Предварительная обработка | Постобработка}.
Итак, например, я могу использовать следующую простую задачу для моделирования фильтрации ресурсов в случаях, когда она не работает из коробки:
<target name="filter" depends="clean">
<copy todir="${maven.build.dir}/${maven.build.finalName}">
<fileset dir="${maven.build.resourceDir.0}"/>
<filterset begintoken="${" endtoken="}">
<filter token="project.version" value="${project.version}"/>
</filterset>
</copy>
</target>
Ответ 4
Не забудьте указать профиль по умолчанию
<profiles>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
...
</properties>
</profile>
</profiles>