2012-05-08 3 views
1

Я пытаюсь использовать <packagingExcludes> Maven war-plugin.Не могу получить maven-war-plugin, чтобы исключить jaxb jars

Это моя конфигурация:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <archive> 
        <manifestEntries> 
         <Implementation-Version>${project.artifactId}-${project.version}-r${buildNumber}</Implementation-Version> 
         <Implementation-Buildtime>${timestamp}</Implementation-Buildtime> 
        </manifestEntries> 
       </archive> 

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

В моем понимании эта линия:

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

Если исключить все банки, начиная с 'JAXB' от встроенного .war файла.

Однако после того, как я бегу clean install я получаю как:

jaxb-api-2.1.jar 
jaxb-impl-2.1.3.jar 

Упакованный в моем .war WEB-INF/Lib реж.

Я использую Maven 3.

Любая помощь очень ценится.

Спасибо заранее,


Чтобы ответить на комментарий gkamal в.

Когда я бегу mvn war:war -X я вижу:

[DEBUG] Processing: jaxb-api-2.1.jar 
[DEBUG] + WEB-INF/lib/jaxb-api-2.1.jar has been copied. 
[DEBUG] Processing: jaxb-impl-2.1.3.jar 
[DEBUG] + WEB-INF/lib/jaxb-impl-2.1.3.jar has been copied. 

Также

[DEBUG] Excluding [WEB-INF/lib/jaxb*.jar] from the generated webapp archive. 

Нет, исключения, предупреждения или ошибки, или ничего, что выглядит подозрительно, ничего конкретного я должен искать?

+0

Запустите его с -X и посмотрите, сможете ли вы получить информацию - вы можете просто запустить войну: войну. – gkamal

+0

@gkamal Я не вижу ничего необычного. – Simeon

+0

Можете ли вы попробовать полный путь к одной из банок вместо подстановочного знака? – gkamal

ответ

3

Для транзитивной зависимости, вы можете использовать exclusions чтобы исключить его.

<dependency> 
    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <version>...</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.xml.bind</groupId> 
      <artifactId>jaxb-api-2.1</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Как gkamal комментировал, вы можете также добавить явную зависимость от JAXB и установить его объем в provided, это не будет перекрывать сферу транзитивной зависимости, так что больше не упаковывают.

Другая альтернатива, война плагин также позволяет exclude based on regular expressions, но синтаксис немного сложнее, следующий фрагмент кода следует исключить все под lib, чье имя начинается с «JAXB»:

<packagingExcludes>%regex[WEB-INF/lib/jaxb.*]</packagingExcludes> 
+0

Принимая это, кажется, немного яснее и имеет больше возможностей (личное мнение, оба ответа верны ИМО). – Simeon

3

Это означает, что у вас есть их зависимость от вашего проекта, чтобы они были упакованы в войну. Просто удалите зависимости, чтобы они больше не были упакованы.

На основе документации опции вы использовали, вы должны использовать регулярное выражение, которое означает, что вы должны написать:

<packagingExcludes>WEB-INF/lib/jaxb.*</packagingExcludes> 

вместо

<packagingExcludes>WEB-INF/lib/jaxb*.jar</packagingExcludes> 
+0

Нет. У нас нет зависимости. Зависимость транзитивна, что означает, что используемая библиотека использует реализацию JAXB, и мы хотим использовать реализацию JDK. – Simeon

+0

Я попробовал 'WEB-INF/lib/jaxb. *' К тому же результату. – Simeon

+0

Я также не вижу, где в документации указано, что нужно использовать регулярное выражение. Синтаксис '**/*. Xml' не является регулярным выражением и является примером в документации. – Simeon

2

Далее в @ Комментарий gkamal на ваш вопрос (08/05/12 @ 11: 52), проверьте версию вашего maven-war-plugin. Я просто потратил 2 часа на эту проблему, чтобы исключить неизвестный переход к javaee-api * .jar.

С maven 3.0.4 я по умолчанию был для maven-war-plugin версии 2.1 (вы можете узнать, запускаете ли вы свою сборку в отладке - например, mvn clean package -X). Один из ваших других комментариев верно, говоря package-excludes. См. war plugin page for details (хотя фактическая страница, описывающая запись, не указывает информацию о версии, которая довольно бедна, так как это вы впервые искали).

Если вы обновите maven-war-plugin до 2.3 (добавьте <version>2.3</version>, вы должны использовать ваш packaging-excludes. Обратите внимание, что вы увидите это только в WEB-INF/lib встроенной войны, а не в временном каталоге войны (который включает исключенные банки, даже если отлаживать говорит, что они должны быть исключены, что очень сбивает с толку, если смотреть на этот вопрос).

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    ... 
    <packagingExcludes> 
     WEB-INF/lib/whatever-*.jar, 
     WEB-INF/lib/javaee-api-*.jar 
    </packagingExcludes> 
    ... 
    </plugin> 
    ... 

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

Итак, с обновлением версии, я думаю, что решение @khmarbaise в порядке (и комментарий, указывающий, что это не сработает, неверно). Однако я считаю, что наилучшей практикой является использование исключений на уровне зависимостей в соответствии с принятым вами ответом.

0

Вы можете сделать это, указав внутри <packagingExcludes></packagingExcludes> внутри </configuration><configuration>.

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>3.2.0</version> 
     <configuration> 
      <packagingExcludes> 
      WEB-INF/lib/ex1-*.jar, 
      WEB-INF/lib/ex2-logging-*.jar 
      </packagingExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Вы можете указать путь по джокера и регулярных выражений тоже. См. Это link для получения дополнительной информации.

Смежные вопросы