В нашем веб-проекте есть пара исполнений maven-war-plugin, которые генерируют военные файлы для каждой среды. Мне нужно добавить новую зависимость к одному из них. До сих пор мы делали это с использованием оверлеев, но этот подход не работает на drpendencies, и в результате мы часто получаем ту же самую библиотеку, добавленную дважды в разные версии. Есть ли способ создать несколько войн на одну сборку (а не несколько сборок с разными профилями) с пользовательскими зависимостями?Добавить дополнительную зависимость в maven-war-plugin
ответ
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 ...
Этот подход очень похож на оверлей, о котором я упоминал, и вызывает ту же проблему - он не заботится о дублированных библиотеках. Кроме того, зависимость: копирует копию без зависимостей. –
ok ,. Я обновил ответ. Я думаю, что это немного взломать. а рабочее решение. – StefanHeimberg
Большое спасибо за усилия. К сожалению, кажется, что исключения из maven-dependency-plugin не исключают транзитивных зависимостей. В вашем примере antlr требуется только спящий режим, но он также находится в пакете с eclipselink. Я согласен с тем, что это не лучшая структура, но из-за процесса сборки и развертывания в моей компании ее нельзя легко изменить. –
- 1. Gradle не включает дополнительную зависимость
- 2. Как смоделировать дополнительную самостоятельную зависимость в mySQL?
- 3. Добавить дополнительную информацию в исключения
- 4. argparse дополнительную зависимость для дополнительного аргумента
- 5. MKPointAnnotation добавить дополнительную недвижимость
- 6. Добавить дополнительную строку в печать
- 7. Добавить дополнительную информацию в arraylist
- 8. Добавить дополнительную работу в SaveChangesAsync
- 9. Добавить дополнительную кнопку в ABPersonViewController
- 10. sed добавить дополнительную колонку
- 11. Как добавить дополнительную операцию?
- 12. GWTUpload добавить дополнительную информацию
- 13. Как добавить дополнительную стоимость?
- 14. Добавить дополнительную зависимость папки lib для сборки sbt в проекте лифта
- 15. CollectionView Добавить дополнительную ячейку «Добавить еще»
- 16. добавить дополнительную ценность kwarg списку
- 17. jQuery sortable добавить дополнительную информацию
- 18. Как добавить дополнительную роль пользователю?
- 19. добавить дополнительную легенду к сюжету
- 20. Добавить дополнительную btn-группу onclick
- 21. Добавить дополнительную вкладку продукта (OpenCart)
- 22. Spark, Как добавить дополнительную память?
- 23. Блестящая NavBar добавить дополнительную информацию
- 24. Добавить зависимость плагина в grails
- 25. Добавить зависимость в проекте установки
- 26. Добавить feed4j зависимость в pom.xml
- 27. Добавить зависимость в плагине Webpack
- 28. Добавить Jquery зависимость в angularJs
- 29. Добавить зависимость от builld.gradle
- 30. angularjs добавить новую зависимость
Первое создание военных файлов, выполнение Maven войны-плагин несколько раз не самый лучший ... Я полагаю, ваши разные войны отличаются только «конфигурационными файлами», чем вам нужно. Если вам нужны разные зависимости, вы должны создать отдельные проекты для этих случаев. – khmarbaise