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

Я пытаюсь контролировать, какие файлы попадают в 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>

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

Документация по плагину Maven-war говорится:

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 25 августа 2010

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

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

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

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

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

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

<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>

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

0 голосов
/ 25 августа 2010

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

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

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

...