maven не включать jar библиотеки в формируемый war файл
Использую Eclipse, у меня есть проект maven, в котором есть некоторые зависимости. Сейчас мне требуется подготовить один из вариантов проекта, в который, помимо прочих изменений, при создании war файла не включать в него библиотеки.
Это если вкратце, ниже более подробно:
На данный момент в проекте есть enum, в котором перечислены вид сборки (DEBUG_MODE, PRODUCTION_MODE, SINGLE_VERSION)
Для DEBUG_MODE и PRODUCTION_MODE собираемый .war файл должен содержать в себе все подключённые библиотеки (они деплоятся на рабочий сервер).
SINGLE_VERSION же разворачивается на локальной машине. Связь может быть плохой, поэтому размер загружаемых файлов критичен. Как вариант: загрузить все используемые в проекте библиотеке на локальную машину и указать в pom.xml, чтобы их он искал в локальной директории.
Возможно ли, в зависимости от параметра сборки, указывать maven'у где искать используемые библиотеки, и, если да, то где взять информацию?
Я находил информацию, в которой объяснялось, как не включать библиотеки в выходной архив war. Также я находил информацию, в которой говорится, как указывать локальную директорию в качестве источника, в которой maven будет искать библиотеки. Но как сделать так, чтобы по изменению одного параметра он включался / не включался в выходной war, сделать этот момент опциональным? Также как можно указывать проекту, где искать эту библиотеку: в локальной директории, или же она лежит в самом архиве?
Ответы (1 шт):
В настрокйах зависимойсей maven можно указать scope для каждой зависимости - включать ее в выходной архив (war / jar) или нет:
<dependency>
<groupId>com.example</groupId>
<artifactId>awesomeapp</artifactId>
<scope>provided</scope>
<version>1.0.3</version>
</dependency>
Либо можно общую настройку задать для всех зависимостей:
<properties>
<dependency.scope>provided</dependency.scope>
</properties>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>awesomeapp</artifactId>
<scope>${dependency.scope}</scope>
<version>1.0.3</version>
</dependency>
</dependencies>
Можно также использовать properties-maven-plugin, и зачитывать настройки из файла application.properties:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>src/config/application.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
В файле application.properties должно быть:
dependency.scope=provided
См. Maven Dependency Scope | Difference between compile and provided