Сборка Maven не фильтрует свойства в Intellij

У меня возникла проблема, когда я запускаю сборку Maven из Intellij 15.0.2, плагин ресурсов Maven не фильтрует мои свойства в мои файлы. Это работает, когда я запускаю mvn compile из командной строки Windows. Моя конфигурация плагина:

<properties>
    <prop1>aaa</prop1>
    <prop2>bbb</prop2>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>file1</include>
                <include>file2</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</configuration>
<executions>
    <execution>
        <phase>compile</phase>
        <goals>
            <goal>resources</goal>
        </goals>
    </execution>
</executions>
</plugin>

person nash    schedule 17.12.2015    source источник
comment
Хм, это интересно (и странно). Можете ли вы опубликовать немного больше информации о вашей версии Intellij, ОС и, самое главное, о конфигурации запуска (скриншот?), которую вы используете с iJ? Я никогда не сталкивался с этой проблемой.   -  person Ashutosh Jindal    schedule 18.12.2015


Ответы (3)


Исправление

tldr: мне удалось воспроизвести вашу проблему, а затем исправить ее, переместив вытащите элемент <resources> из конфигурации плагина прямо под <build> вот так:

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>${basedir}/src/main/resources</directory>
            <includes>
                <include>*</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>resources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- <snip> Other plugins -->
    </plugins>
</build>

Будущие читатели, если вас интересует только исправление, не читайте дальше. Для бесстрашных ТАК кровавые подробности ждут ниже!

Почему я это сделал?

Я сделал это, так как именно так я включил фильтрацию ресурсов в предыдущем проекте. Мне не нужно было менять фазу по умолчанию (process-resources) и, следовательно, вообще не нужно было явно указывать maven-resources-plugin. Однако мне было любопытно узнать, почему конфигурация OP не работает, и поэтому я посмотрел примеры для resources mojo в maven-resources-plugin документация, в которой <resources> указано непосредственно под <build>.

Формулировка в документации по Использование подразумевает, что конфигурация <resources> требуется в конфигурации плагина только для copy-resources mojo:

введите описание изображения здесь

Обновлять

Нужно было начать с введения maven-resources-plugin, которое явно состояния:

resources:resources копирует ресурсы основного исходного кода в основной выходной каталог.

Эта цель обычно выполняется автоматически, поскольку по умолчанию она привязана к фазе жизненного цикла ресурсов процесса. Он всегда использует элемент project.build.resources для указания ресурсов и по умолчанию использует project.build.outputDirectory для указания места назначения копирования.



Странности Intellij?

У меня возникает соблазн предположить, что Intellij не виноват.

В Intellij 15.0.2 поведение фильтрации (т. е. работает оно или нет) было одинаковым при выполнении mvn clean compile из Intellij или из командной строки. Я бы подумал, что проблема была в конфигурации плагина/pom, а не в самом Intellij, если только в интеграции Intellij maven нет ошибки. Что бы это ни стоило, я еще не сталкивался с этой проблемой при использовании maven из Intellij (использую его уже некоторое время, начиная с версии 12.x).

Использует ли ваш Intellij связанный mvn, который отличается от mvn, используемого командной строкой? то есть maven такой же, как здесь и из командной строки? Это единственное, о чем я могу думать, помимо ошибки в интеграции Intellij maven (маловероятно), которая может объяснить различное поведение, которое вы видите.

введите описание изображения здесь

person Ashutosh Jindal    schedule 18.12.2015

Это было моим решением.

Перейдите в «Выполнить»> «Редактировать конфигурации».

Во вкладке Сервер > Перед запуском.

Удалите артефакт и добавьте эту цель maven: чистая компиляция

введите здесь описание изображения

person Jose Boretto Blengino    schedule 19.04.2018
comment
«чистой компиляции» может быть достаточно - person senyor; 06.06.2019

Попробуйте добавить ${pom.basedir} в начало тега <directory>:

от

<build>
    (...)
    <testResources>
        <testResource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
    </testResource>
    (...)
</build>

to

<build>
    (...)
    <testResources>
        <testResource>
            <filtering>true</filtering>
            <directory>${pom.basedir}/src/test/resources</directory>
        </testResource>
    </testResources>
    (...)
</build>

Я подозреваю, что это необходимо для Intellij, чтобы найти правильные файлы ресурсов для выполнения замены свойств pom.xml, когда проект Maven имеет более одного модуля.

person Sergio M C Figueiredo    schedule 06.10.2020