Maven: правильный способ включить фильтрацию для подмножества ресурсов - PullRequest
0 голосов
/ 20 апреля 2011

Рассмотрим следующую структуру каталогов:

src/main/resources/
    resource1.properties
    subdir/
        resource2.properties

Мне нужно resource2.properties (и его братья и сестры), чтобы пройти Maven-фильтрацию , но скорее исключить все другие ресурсы из фильтрации.

Это безопасность: другие файлы свойств могут содержать ${xxx} токенов, которые не должны заменяться.Мне нужно сохранить структуру каталогов исходного кода на target.

. В конце концов, я обнаружил, что единственный способ добиться этого (таким образом, чтобы не нарушать * 1013 maven-eclipse-plugin *)*) кажется:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>subdir/**</exclude>
        </excludes>
    </resource>
    <resource>
        <!-- 'subdir' resources need placeholder substitution (ie: "filtering") -->
        <directory>src/main/resources/subdir</directory>
        <targetPath>${project.build.outputDirectory}/subdir</targetPath>
        <filtering>true</filtering>
    </resource>
</resources>

Вы могли бы сказать, что это извилистый и потенциально хрупкий.При этом используется Maven 2.2.1 с maven-eclipse-plugin v2.8 (последняя версия).

В других, чуть менее запутанных версиях вышеупомянутых возникли проблемы с maven-eclipse-plugin, который жалуется на что-то подобноеto:

[INFO] Request to merge when 'filtering' is not identical. Original=resource src/main/resources: output=target/classes, include=[], exclude=[subdir/**|**/*.java], test=false, filtering=false, merging with=resource src/main/resources: output=target/classes, include=[subdir/**], exclude=[**/*.java], test=false, filtering=true

Это напоминает этот старый поток : упомянутый обходной путь работает (понижение до v2.6 из maven-eclipse-plugin), но это должнобольше не требуется, потому что связанные ошибки помечены как исправленные?

Это не похоже на слишком далеко зашедший случай использования, но я изо всех сил ...

1 Ответ

2 голосов
/ 20 апреля 2011

Что по этому поводу:

   <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources/subdir</directory>
        <targetPath>${project.build.OutputDirectory}/subdir</targetPath>
        <filtering>true</filtering>
        <includes>
          <include>**/*</include>
        </includes>
      </resource>
    </resources>
   </build>
...