Как работает поддержка фильтрации 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>