Как добавить локальный JAR-файл в Maven проект (ручная установка и system scope)
Способ 1: Установка JAR в локальный репозиторий (рекомендуемый)
Самый правильный и надежный способ — установить JAR в ваш локальный Maven репозиторий (~/.m2/repository) с помощью команды mvn install:install-file. После этого вы сможете использовать его как обычную зависимость.
Выполните в терминале (из корня проекта):
mvn install:install-file \
-Dfile=lib/my-lib-1.0.jar \
-DgroupId=com.example \
-DartifactId=my-lib \
-Dversion=1.0 \
-Dpackaging=jar
После этого в pom.xml используйте обычную зависимость:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-lib</artifactId>
<version>1.0</version>
</dependency>
Почему это хорошо?
- JAR попадает в локальный репозиторий — Maven будет видеть его во всех проектах.
- Не нужно указывать пути — работает как обычная зависимость.
- JAR автоматически включается в финальную сборку (jar, war).
- Команда срабатывает один раз, и больше о файле можно забыть.
Способ 2: Использование system scope (проще, но хуже)
Если вы не хотите устанавливать JAR в репозиторий, можно указать прямой путь к файлу через system scope и systemPath:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-lib</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/my-lib-1.0.jar</systemPath>
</dependency>
Минусы этого подхода:
- JAR не будет включен в итоговый JAR/WAR (если не использовать плагины вроде maven-assembly-plugin).
- Путь абсолютный или относительно проекта — при переносе проекта на другую машину нужно следить за расположением.
- Maven не проверяет, существует ли файл, до момента сборки.
- Не работает с
mvn dependency:copy-dependenciesи другими командами.
Когда использовать system scope? Только для быстрого прототипирования или если JAR точно не нужен в финальной сборке (например, для тестов).
Способ 3: Создание локального репозитория внутри проекта (для CI/CD)
Если вы работаете в команде и хотите, чтобы JAR был доступен всем без ручной установки, создайте папку lib/repo и укажите её как дополнительный репозиторий в pom.xml:
<repositories>
<repository>
<id>local-repo</id>
<url>file://${project.basedir}/lib/repo</url>
</repository>
</repositories>
Затем установите JAR в эту папку:
mvn install:install-file \
-Dfile=lib/my-lib-1.0.jar \
-DgroupId=com.example \
-DartifactId=my-lib \
-Dversion=1.0 \
-Dpackaging=jar \
-DlocalRepositoryPath=lib/repo
Теперь все разработчики, склонировавшие проект, получат JAR вместе с репозиторием. Зависимость в pom.xml остаётся стандартной.
Альтернатива: Использование плагина maven-install-plugin в lifecycle
Если вы не хотите каждый раз вручную запускать команду mvn install:install-file, можно привязать установку JAR к фазе initialize в вашем pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>install-my-lib</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/lib/my-lib-1.0.jar</file>
<groupId>com.example</groupId>
<artifactId>my-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
Теперь при каждой сборке Maven автоматически установит ваш JAR в локальный репозиторий, если его там ещё нет. Зависимость в pom.xml остаётся стандартной. Этот подход удобен, когда JAR-файл часто обновляется, и вы хотите автоматизировать процесс.