Как исключить pom.xml из Maven сгенерированной войны?

Используя Maven war plugin, я генерирую WAR, который включает следующий каталог:

META-INF
-- maven
   -- com.abc.def
      -- myServlet
         -- pom.xml
         -- pom.properties

В релизе я хочу исключить этот каталог maven. Как я могу это сделать?

Я попробовал последний плагин maven-war-plugin (2.1-beta-1), он имеет конфигурацию "packagingExcludes", но он не работает, как я желаю.

Любые предложения?

Ответы

Ответ 1

Используя стандартную упаковку Maven, вы не можете опустить файл, насколько мне известно. Тем не менее, можно использовать maven-assembly-plugin для построения войны, в этом случае у вас есть намного более тонкий контроль над содержимым артефакта, и может опустить pom.xml.

Однако я лично счел полезным хранить pom.xml для диагностических целей. Может быть полезно узнать, что было использовано для создания и сборки войны, когда пытались выяснить, что не так с вашим приложением.

Обновление: в причудливой бит синхронности на Pascal ответ, я только что читал в Ссылка на Archiver, и кажется, что это можно сделать, установив для свойства addMavenDescriptor значение false. Лично я все равно не буду делать это по причинам, указанным выше. Но вы можете изменить свое согласие на ответ Паскаля.

Ответ 2

Я не уверен, но я думаю, что Maven Archiver (который в основном используется плагинами для обработки упаковки) можно настроить для достижения это.

О элементе <addMavenDescriptor>, Maven Archiver Ссылка говорит:

Будет ли сгенерированный архив содержать эти два файла Maven:

  • Файл pom, расположенный в архиве в META-INF/maven/${groupId}/${artifactId}/pom.xml
  • Файл pom.properties, расположенный в архиве META-INF/maven/${groupId}/${artifactId}/pom.properties

Значение по умолчанию - true.

Итак, настроенный таким образом pom должен сделать трюк:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.0</version>
        <configuration>
          <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
          </archive>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

Ответ 3

Ввод папки META-INF в каталог ресурсов или в корневой каталог исходного каталога приведет к уничтожению содержимого META-INF, созданного Maven. Для файлов WAR, поместите META-INF в каталог вашего веб-контента, сделайте то же самое.

Добавление другого контента в этот пользовательский META-INF переопределит то, что создало maven.

Ответ 4

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <warSourceExcludes>pom.xml</warSourceExcludes>
    </configuration>
</plugin>

или

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <warSourceExcludes>here/there/everywhere/a/pom.xml</warSourceExcludes>
    </configuration>
</plugin>