Выбор определенных файлов ресурсов в WAR из местоположения по умолчанию src / main / resources с помощью Maven

Я пытаюсь контролировать, какие файлы входят в пакет WAR, созданный mvn package goal. В частности, я хочу исключить некоторые файлы из папки src/main/resources по умолчанию для каждого пакета (я пытаюсь делать сборки / пакеты для разных сред).

Я попытался использовать maven-war-plugin, но не смог. Если я добавлю эту конфигурацию (для тестирования):

<webResources>
    <resource>
        <directory>src/main/resources</directory>
        <targetPath>WEB-INF/classes</targetPath>
        <excludes>
            <exclude>*.xml</exclude>
        </excludes>
    </resource>
</webResources>

... мой WEB-INF/classes по-прежнему будет содержать файлы XML. Это связано с тем, что параметр webResources, похоже, дублирует процесс копирования (приведенная выше конфигурация действительно работает, файлы не копируются ... но вместо этого они копируются в каком-то другом процессе).

В документации Maven-war-plugin говорится :

Каталог ресурсов по умолчанию для всех проектов Maven 2 - src / main / resources, который попадет в target / classes и WEB-INF / classes в WAR. Структура каталогов будет сохранена в процессе.

Плагин WAR также может включать ресурсы, не найденные в каталоге ресурсов по умолчанию, с помощью параметра webResources.

Это немного сбивает с толку. Значит ли это:

  • Параметр webResources - это функция в maven-war-plugin, которая позволяет включать файлы только извне src/main/resources папки? Если да, то как мы можем изменить скопированные файлы изнутри src/main/resources?
  • Параметр webResources - это функция в maven-war-plugin, которая позволяет включать файлы также извне src/main/resources папки? Если да, то как его можно настроить для этого?
  • Другой вариант?

person Tuukka Mustonen    schedule 24.08.2010    source источник
comment
Вы пытаетесь создать для разных сред с одним и тем же пакетом mvn или контролируете это с помощью профилей?   -  person khmarbaise    schedule 24.08.2010


Ответы (2)


Я пытаюсь контролировать, какие файлы входят в пакет WAR, созданный целью пакета mvn. В частности, я хочу исключить некоторые файлы из папки src / main / resources по умолчанию для каждого пакета.

Ресурсы из каталога ресурсов по умолчанию (src/main/resources) копируются в выходной каталог сборки (target/classes) во время _ 3_ этап. Затем, на этапе package, содержимое target/classes берется и упаковывается в распределенный архив, например WAR, и в этом случае попадает в WEB-INF/classes.

Итак, если вы хотите контролировать, какие ресурсы попадут в WEB-INF/classes, вам нужно контролировать, какие ресурсы попадут в target/classes, т.е. как-то изменить поведение цель, привязанная к process-resources фазе, в частности resources:resources цель Плагин ресурсов Maven.

И для этого (вероятно, это не интуитивно) вы можете объявить элементы exclude или include внутри resources элемента pom, как показано в Включение и исключение файлов и каталогов. Применяется к каталогу ресурсов по умолчанию:

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <excludes>
        <exclude>**/*.xml</exclude>
      </excludes>
    </resource>
  </resources>
</build>

И если вы хотите использовать собственные правила исключения для разных сред, объедините это с профили. Например:

<project>
  ...
  <profiles>
    <profile>
      <id>env-uat</id>
      <activation>
        <property>
          <name>env</name>
          <value>uat</value>
        </property>
      </activation>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <excludes>
              <exclude>**/*.xml</exclude>
            </excludes>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
</project>

И при использовании этого профиля файлы xml не попадут в target/classes и, следовательно, не попадут в WEB-INF/classes в финальной войне.

Я попытался использовать maven-war-plugin, но не смог. Если я добавлю эту конфигурацию (для тестирования) (...) мои WEB-INF / классы по-прежнему будут содержать файлы XML

Здесь вы добавляете дополнительный каталог ресурсов, который оказывается уже включенным каталогом ресурсов по умолчанию. Итак, что бы вы ни исключили, это не имеет никакого эффекта, поскольку файлы в любом случае копируются в target/classes во время process-resources и, таким образом, все равно попадают в WEB-INF/classes.

Другими словами, используйте webResources, если вы хотите добавить дополнительные ресурсы, которые не являются частью каталога ресурсов по умолчанию:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the pom.xml directory -->
              <directory>extra-resources</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

Но я не думаю, что это то, что вы здесь ищете, и предлагаю использовать подход, предложенный выше.

person Pascal Thivent    schedule 25.08.2010
comment
Я действительно пытался исключить файлы из глобального элемента resources. В результате исключенные файлы не попали в target/classes, но все равно попали в target/mypackage-1.0.0-SNAPSHOT. Но я проверю это еще раз, чтобы убедиться, возможно, я допустил здесь какую-то опечатку / ошибку: / - person Tuukka Mustonen; 25.08.2010
comment
@Tuukka Хм ... Да, пожалуйста, проверьте еще раз (с чистой сборкой). - person Pascal Thivent; 25.08.2010
comment
@ Паскаль: после повторной попытки, похоже, он работает. Может быть, я сделал ошибку раньше, немного запутав весь процесс: / Так что ваше предложение определенно правильное. У меня все еще есть проблема с Compilation failure из-за illegal start of expression, потому что Maven не распознает аннотации, которые я использую в тестах. Однако это похоже на обычную проблему Maven и никак не связано с исключением файлов. Я постараюсь решить эту проблему в следующий раз :) Спасибо за вашу поддержку! - person Tuukka Mustonen; 25.08.2010
comment
К счастью, проблему с компиляцией удалось быстро решить, это произошло по следующей причине: jroller.com/peter_pilgrim/ entry / eclipse_compiler_versus_the_sun. Итак, мне удалось убедиться, что упаковка идет, как предполагалось, файлы исключены, как предполагалось. Выбирая это как принятый ответ. - person Tuukka Mustonen; 25.08.2010

См. Паскаля ответ за правильную конфигурацию и хорошее объяснение процесса. Я просто даю прямой ответ на этот вопрос здесь:

  • Параметр webResources - это функция в maven-war-plugin, которая позволяет включать файлы только из-за пределов папки src / main / resources? Если да, то как мы можем изменить скопированные файлы из src / main / resources?
  • Параметр webResources - это функция в maven-war-plugin, которая позволяет включать файлы также из-за пределов папки src / main / resources? Если да, то как его можно настроить для этого?

Это первое, параметр webResources в maven-war-plugin позволяет включать только дополнительные ресурсы извне src/main/resources. Он не позволяет настраивать включает / исключает для самого src/main/resources.

person Tuukka Mustonen    schedule 25.08.2010