Как добавить локальные 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
SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder" в Maven-проекте