16

Как добавить локальные JAR-файлы в Maven-проект?

14

Как мне добавить локальные JAR-файлы (которые еще не находятся в репозитории Maven) непосредственно в библиотеки моего проекта?

5 ответ(ов)

2

Вы можете создать новую папку, назовем её 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 будет установлен в локальном репозитории.

0

Чтобы решить вашу задачу с использованием 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, но и к любой другой фазе, которая соответствует вашим потребностям.

0

Очень быстрый и неуклюжий способ - указать на локальный файл, но стоит отметить, что использование <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>

Таким образом, у вас будет более гибкое и совместимое решение для управления зависимостями в проекте.

0

Представленный код — это пример 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.

0

Важная деталь в зависимости заключается в том, что нужно использовать \({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, что особенно важно в больших проектах или при использовании модульной структуры.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь