Исключить все файлы jar из webapp / WEB-INF /lib

#maven #maven-war-plugin

#maven #maven-war-плагин

Вопрос:

У меня есть сторонние jar-файлы в моем веб-проекте, размещенные по адресу /src/main/webapp/WEB-INF/lib/

Я упомянул зависимость для всех требуемых JAR в pom.xml . Теперь, поскольку зависимости определены в POM, файлы JAR будут автоматически упакованы в lib папку.

  • Я хочу исключить все JAR из lib .
  • Файлы JAR зависимостей должны быть упакованы внутри библиотеки при сборке WAR

Я НЕ МОГУ УДАЛИТЬ LIB Из WEB-INF, ПОТОМУ что он ИСПОЛЬЗУЕТСЯ В ЛОКАЛЬНОЙ РАЗРАБОТКЕ

Это то, что я пробовал до сих пор:

 <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <packagingExcludes>META-INF/context.xml</packagingExcludes>
    <webResources>
      <resource>
        <directory>src/main/webapp/WEB-INF/lib</directory>
        <excludes>
          <exclude>**/**</exclude>
        </excludes>
      </resource>
    </webResources>
  </configuration>
</plugin>
  

Есть идеи?

Комментарии:

1. нет причин использовать этот lib каталог для local development того, чтобы Maven кэшировал все локально, а Eclipse, Idea и Netbeans все знают, как извлекать зависимости оттуда. Если вы разрабатываете в webapps каталоге Tomcat, то это ужасная практика. Maven может легко создавать и развертывать war файл во всех популярных контейнерах J2EE.

Ответ №1:

Это должно быть «packagingExcludes» вместо «warSourceExcludes»:

 <configuration>
    <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
    ....
</configuration>
  

Из http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html :

В версии 2.1-alpha-1 это было неправильно названо warSourceExcludes

Ответ №2:

Попробуйте это:

 <configuration>
    <warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes>
    ....
</configuration>
  

Однако я согласен с Джарродом в том, что хранить ваши jar в WEB-INF/lib «вручную» — плохая практика. Я использовал это раньше, чтобы избежать того, чтобы jar, поступающие как зависимость, были упакованы, чтобы иметь возможность впоследствии их переупаковывать.

Комментарии:

1. Можете ли вы попробовать опустить некоторые другие детали конфигурации? Только для тестирования? Возможно, существует какой-то конфликт, но если вы используете только этот параметр, он действительно работает.

Ответ №3:

у вас не должно быть ничего в вашем WEB-INF/lib каталоге для начала. Если вы используете Eclipse, вы можете указать ему, чтобы он создавал свой проект из pom.xml , и он будет знать, что нужно искать в ~/.m2/repository зависимости, Intellij IDEA также делает это. Ввод зависимостей в WEB-INF/lib виде сводит на нет цель использования Maven для управления зависимостями. Что происходит, когда зависимости в pom.xml не синхронизированы с версиями в WEB-INF/lib

Комментарии:

1. Да, я знаю, что неправильно что-либо иметь в WEB-INF/lib , но я создаю здесь устаревший проект, и очень сложно удалить библиотеки из этого расположения (это повлияет на локальную разработку)

2. первый шаг в работе с устаревшей системой сборки — оплатить технический долг и исправить его для сборки за один шаг, вы получите выгоду немедленно, и все, кто придет после вас, также получат выгоду, экономя деньги и время компании.