Как добавить локальные JAR-файлы в Maven-проект?
Как мне добавить локальные JAR-файлы (которые еще не находятся в репозитории Maven) непосредственно в библиотеки моего проекта?
5 ответ(ов)
Вы можете создать новую папку, назовем её local-maven-repo
, в корне вашего Maven проекта.
Затем добавьте локальный репозиторий внутрь вашего <project>
в файле pom.xml
:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.basedir}/local-maven-repo</url>
</repository>
</repositories>
После этого, для установки каждого внешнего JAR-файла, перейдите в корень вашего проекта и выполните следующую команду:
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
Замените [GROUP]
, [ARTIFACT]
, [VERS]
и [FILE_PATH]
на соответствующие значения для вашего JAR-файла. После выполнения этой команды, ваш JAR будет установлен в локальном репозитории.
Чтобы решить вашу задачу с использованием maven-install-plugin
в файле pom.xml
, вы можете добавить следующий код в секцию <build>
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/yourJar.jar</file>
<groupId>com.somegroup.id</groupId>
<artifactId>artefact-id</artifactId>
<version>x.y.z</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
С помощью этого конфигурационного блока вы можете выполнить команду mvn initialize
, и указанный jar-файл будет установлен в локальный репозиторий Maven. После этого данный jar будет доступен на любом этапе сборки Maven на этой машине. Не забудьте добавить эту зависимость в ваш pom.xml
, как это делается для других зависимостей, используя тег <dependency></dependency>
.
Кроме того, вы можете привязать установку jar не только к фазе initialize
, но и к любой другой фазе, которая соответствует вашим потребностям.
Очень быстрый и неуклюжий способ - указать на локальный файл, но стоит отметить, что использование <scope>system</scope>
сейчас устарело:
<dependency>
<groupId>com.sample</groupId>
<artifactId>samplifact</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
Однако этот подход будет работать только на вашей машине (очевидно). Для обмена библиотеками обычно имеет смысл использовать хороший m2-репозиторий (например, Nexus или Artifactory). Если у вас нет возможности использовать один из этих инструментов или вы не хотите его настраивать, вы можете создать локальный архив в структуре Maven и настроить "репозиторий" в вашем pom.xml
:
Для локального репозитория:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV/mymvnrepo</url>
</repository>
</repositories>
Для удаленного репозитория:
<repositories>
<repository>
<id>my-remote-repo</id>
<url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
</repository>
</repositories>
Для этого решения также возможно использовать относительный путь с переменной ${basedir}
:
<url>file:${basedir}</url>
Таким образом, у вас будет более гибкое и совместимое решение для управления зависимостями в проекте.
Представленный код — это пример Maven-зависимости в формате XML, которая используется в файле pom.xml
. Вот перевод на русский язык с пояснениями:
<dependency>
<groupId>название группы</groupId>
<artifactId>название артефакта</artifactId>
<version>номер версии</version>
<scope>система</scope>
<systemPath>расположение jar-файла</systemPath>
</dependency>
Объяснение полей:
<groupId>
— это идентификатор группы, отвечающий за организацию или проект, к которому принадлежит артефакт.<artifactId>
— это имя самого артефакта (например, библиотеки или модуля).<version>
— здесь указывается номер версии артефакта.<scope>
— определяет область видимости зависимости, в данном случаеsystem
указывает, что зависимость расположена вне репозитория Maven.<systemPath>
— это путь к JAR-файлу на файловой системе. Необходимо использовать абсолютный путь.
Учтите, что использование зависимости с областью system
не является рекомендуемой практикой, так как это может снизить переносимость вашего проекта. Вместо этого предпочтительнее использовать зависимости, которые можно получить из центрального репозитория Maven.
Важная деталь в зависимости заключается в том, что нужно использовать \({pom.basedir}** вместо просто **\). Это необходимо для того, чтобы правильно указать путь к системной зависимости.
Вот пример зависимости с корректным использованием $:
<dependency>
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>
Используя $, вы гарантируете, что путь будет правильно разрешён относительно расположения файла POM, что особенно важно в больших проектах или при использовании модульной структуры.
Как указать Maven использовать последнюю версию зависимости?
IntelliJ сообщает "Невозможно разрешить символ", но код все равно компилируется
Как работают сервлеты? Инстанцирование, сессии, общие переменные и многопоточность
Возможные значения конфигурации hbm2ddl.auto в Hibernate и их назначение
Что такое PECS (Producer Extends Consumer Super)?