Ответ 1
Вопрос является бесценным ответом сам по себе, поскольку, по-видимому, сложная процедура, которую предоставляет автор, является единственным способом настройки различных кодировок для различных типов фильтрованных файлов. Однако приведенный пример специфичен для автора нестандартного прецедента и замаскирует несколько важных деталей, без которых фактическое использование примера чревато gotchas:
- Это не очевидно, но в примере автора цель по умолчанию для копирования ресурсов
resources
по-прежнему включена и работает в дополнение к двум определенным целям! - Вы заметите, что автор использовал фазу жизненного цикла
generate-resources
вместо стандартногоprocess-resources
. Это трюк, чтобы обойти первый пункт выше; создавая две целиcopy-resources
на ранней стадии жизненного цикла, ресурсы копируются в соответствии с заданными правилами, а затем, когда цельdefault-resources
приходит, исходное копирование ресурса остается нетронутым, по-видимому, потому, что его параметрoverwrite
defaultsfalse
. Но было бы лучше полностью отключить выполнениеdefault-resources
. - Автор предоставляет объявление
outputDirectory
. Естественно было бы думать, что автор предоставил это только потому, что желателен пользовательский выходной каталог; в конце концов, цельresources
предоставляет значение по умолчанию для этого параметра. Странно, однако, для целиcopy-resources
эта настройка действительно необходима! Однако существует стандартная переменная Maven${project.build.outputDirectory}
, которая может использоваться как значение.
Основываясь на собственном примере автора в вопросе, здесь показан способ "вырезать и вставлять" файлы фильтров с использованием ISO-8859-1, копировать другие файлы без фильтрации и предотвращать появление по умолчанию ресурсного копирования; все с использованием стандартных исходных и целевых каталогов:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<!-- Turn off default resource copying -->
<id>default-resources</id>
<phase />
</execution>
<execution>
<!-- Filter resources in properties files. -->
<id>filter-properties-files</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>ISO-8859-1</encoding>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
<execution>
<!-- Do not do property substitution in files that are not properties files, such as binary files. -->
<id>copy-other-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>