2015-12-04 2 views
0

В нашем веб-проекте есть пара исполнений maven-war-plugin, которые генерируют военные файлы для каждой среды. Мне нужно добавить новую зависимость к одному из них. До сих пор мы делали это с использованием оверлеев, но этот подход не работает на drpendencies, и в результате мы часто получаем ту же самую библиотеку, добавленную дважды в разные версии. Есть ли способ создать несколько войн на одну сборку (а не несколько сборок с разными профилями) с пользовательскими зависимостями?Добавить дополнительную зависимость в maven-war-plugin

+0

Первое создание военных файлов, выполнение Maven войны-плагин несколько раз не самый лучший ... Я полагаю, ваши разные войны отличаются только «конфигурационными файлами», чем вам нужно. Если вам нужны разные зависимости, вы должны создать отдельные проекты для этих случаев. – khmarbaise

ответ

1

Hy Tomasz W

Я создал образец файл pom.xml

с Maven войны-плагин в одиночку, вы не можете добавить зависимость только для одного исполнения. но в моем рабочем примере я отделил войну плагина вывода в отдельные папки, а затем с помощью плагина зависимостей я скопировал depencencies необходимое только для «Dev» войны в конкретную WEB-INF/Lib папку ...

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.github.stefanheimberg.stackoverflow-34083152</groupId> 
    <artifactId>stackoverflow-34083152</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <properties> 
     <!-- maven default properties --> 
     <encoding>UTF-8</encoding> 
     <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation> 
     <maven.compiler.showWarnings>true</maven.compiler.showWarnings> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.0.5.Final</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>eclipselink</artifactId> 
      <version>2.6.1</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>add-dev-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <excludeGroupIds>org.eclipse.persistence</excludeGroupIds> 
          <excludeArtifactIds>eclipselink</excludeArtifactIds> 
          <outputDirectory>${project.build.directory}/${project.build.finalName}-dev/WEB-INF/lib</outputDirectory> 
         </configuration> 
        </execution> 
        <execution> 
         <id>add-test-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <excludeGroupIds>org.hibernate</excludeGroupIds> 
          <excludeArtifactIds>hibernate-core</excludeArtifactIds> 
          <outputDirectory>${project.build.directory}/${project.build.finalName}-test/WEB-INF/lib</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>create-dev-package</id> 
         <phase>package</phase> 
         <goals> 
          <goal>war</goal> 
         </goals> 
         <configuration> 
          <warName>${project.build.finalName}-dev</warName> 
          <webappDirectory>${project.build.directory}/${project.build.finalName}-dev</webappDirectory> 
         </configuration> 
        </execution> 
        <execution> 
         <id>create-test-package</id> 
         <phase>package</phase> 
         <goals> 
          <goal>war</goal> 
         </goals> 
         <configuration> 
          <warName>${project.build.finalName}-test</warName> 
          <webappDirectory>${project.build.directory}/${project.build.finalName}-test</webappDirectory> 
         </configuration> 
        </execution> 
       </executions> 
       <configuration> 

       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

выходной файл:

$ ls -l target/*/WEB-INF/lib/* 
-rw-r--r-- 1 heimbergs 1049089 434678 Okt 1 15:03 target/stackoverflow-34083152-1.0-SNAPSHOT/WEB-INF/lib/commons-lang3-3.4.jar 
-rw-r--r-- 1 heimbergs 1049089 445288 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/antlr-2.7.7.jar 
-rw-r--r-- 1 heimbergs 1049089 434678 Okt 1 15:03 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/commons-lang3-3.4.jar 
-rw-r--r-- 1 heimbergs 1049089 313898 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/dom4j-1.6.1.jar 
-rw-r--r-- 1 heimbergs 1049089 75288 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/hibernate-commons-annotations-5.0.1.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 5570751 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/hibernate-core-5.0.5.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 113371 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/hibernate-jpa-2.1-api-1.0.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 187752 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/jandex-2.0.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 714194 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/javassist-3.18.1-GA.jar 
-rw-r--r-- 1 heimbergs 1049089 85147 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/javax.json-1.0.4.jar 
-rw-r--r-- 1 heimbergs 1049089 66802 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/jboss-logging-3.3.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 63777 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/validation-api-1.1.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 109318 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-dev/WEB-INF/lib/xml-apis-1.0.b2.jar 
-rw-r--r-- 1 heimbergs 1049089 445288 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/antlr-2.7.7.jar 
-rw-r--r-- 1 heimbergs 1049089 21007 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/commonj.sdo-2.1.1.jar 
-rw-r--r-- 1 heimbergs 1049089 434678 Okt 1 15:03 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/commons-lang3-3.4.jar 
-rw-r--r-- 1 heimbergs 1049089 313898 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/dom4j-1.6.1.jar 
-rw-r--r-- 1 heimbergs 1049089 9051263 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/eclipselink-2.6.1.jar 
-rw-r--r-- 1 heimbergs 1049089 187752 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/jandex-2.0.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 714194 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/javassist-3.18.1-GA.jar 
-rw-r--r-- 1 heimbergs 1049089 85147 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/javax.json-1.0.4.jar 
-rw-r--r-- 1 heimbergs 1049089 162126 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/javax.persistence-2.1.0.jar 
-rw-r--r-- 1 heimbergs 1049089 66802 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/jboss-logging-3.3.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 63777 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/validation-api-1.1.0.Final.jar 
-rw-r--r-- 1 heimbergs 1049089 109318 Dez 4 13:49 target/stackoverflow-34083152-1.0-SNAPSHOT-test/WEB-INF/lib/xml-apis-1.0.b2.jar 

вы видите DEV война содержит Hibernate банки вкл транзитивных зависимостей и тест война содержит EclipseLink баночку вкл. транзитивных зависимостей.

Я думаю, что это нехорошее использование maven. но он должен работать. и это не масштабируемое .. и теперь вы должны управлять всеми исключающими списки для всех различных военных файлов ... pom.xml может быть очень быстро бардак ...

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

UPDATE

  • обновил пример с переходными depencencies ...
+0

Этот подход очень похож на оверлей, о котором я упоминал, и вызывает ту же проблему - он не заботится о дублированных библиотеках. Кроме того, зависимость: копирует копию без зависимостей. –

+0

ok ,. Я обновил ответ. Я думаю, что это немного взломать. а рабочее решение. – StefanHeimberg

+0

Большое спасибо за усилия. К сожалению, кажется, что исключения из maven-dependency-plugin не исключают транзитивных зависимостей. В вашем примере antlr требуется только спящий режим, но он также находится в пакете с eclipselink. Я согласен с тем, что это не лучшая структура, но из-за процесса сборки и развертывания в моей компании ее нельзя легко изменить. –

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