Как добавить локальные 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 сообщает "Невозможно разрешить символ", но код все равно компилируется
Необходимый компилятор в данной среде отсутствует. Возможно, вы используете JRE вместо JDK?
Запуск одного тестового метода с помощью Maven
Maven: Упаковка / Установка без тестов (пропустить тесты)