Вопрос-ответ

How to add local jar files to a Maven project?

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

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

Переведено автоматически
Ответ 1

Вы можете добавлять локальные зависимости напрямую (как упомянуто в build maven project with propriatery libraries included) следующим образом:

<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

Обновить

В новых выпусках эта функция помечена как устаревшая, но все еще работает и пока не удалена (вы просто видите предупреждение в журнале при запуске maven). В группе maven по этому поводу поднят вопрос https://issues.apache.org/jira/browse/MNG-6523 (Вы можете принять участие и описать, почему эта функция полезна в некоторых случаях). Я надеюсь, что эта функция останется там!

Если вы спрашиваете меня, пока функция не удалена, я использую это, чтобы создать зависимость только от одного непослушного jar-файла в моем проекте, который не помещается в репозиторий. Если эта функция будет удалена, что ж, здесь есть много хороших ответов, которые я смогу выбрать позже!

Ответ 2

Установите JAR в свой локальный репозиторий Maven (обычно .m2 в свою домашнюю папку) следующим образом:

mvn install:install-file \
-Dfile=<path-to-file> \
-DgroupId=<group-id> \
-DartifactId=<artifact-id> \
-Dversion=<version> \
-Dpackaging=<packaging> \
-DgeneratePom=true

Где каждый ссылается на:

<path-to-file>: путь к файлу для загрузки, например → c:\kaptcha-2.3.jar

<group-id>: группа, в которой файл должен быть зарегистрирован, например → com.google.code

<artifact-id>: имя артефакта для файла, например → kaptcha

<version>: версия файла, например → 2.3

<packaging>: упаковка файла, например → jar

Ссылка

Ответ 3

Во-первых, я хотел бы отдать должное за этот ответ анонимному пользователю Stack Overflow - я почти уверен, что видел подобный ответ здесь раньше - но теперь я не могу его найти.

Лучший вариант использования локальных файлов JAR в качестве зависимости - создать локальный репозиторий Maven. Такой репозиторий представляет собой не что иное, как правильную структуру каталогов с файлами pom в нем.

Для моего примера: у меня есть мой главный проект в ${master_project} location и включен subproject1 ${master_project}/${subproject1}.

Затем я создаю репозиторий Maven в: ${master_project}/local-maven-repo.

В файле pom в subproject1, расположенном по адресу ${master_project}/${subproject1}/pom.xml, необходимо указать репозиторий, который будет принимать путь к файлу в качестве параметра URL:

<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>

Зависимость может быть указана как для любого другого репозитория. Это делает ваш репозиторий pom независимым. Например, как только желаемый JAR станет доступен в Maven central, вам просто нужно удалить его из вашего локального репозитория, и он будет извлечен из репозитория по умолчанию.

    <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.servicebinder</artifactId>
<version>0.9.0-SNAPSHOT</version>
</dependency>

Последнее, но не менее важное, что нужно сделать, это добавить файл JAR в локальный репозиторий, используя переключатель -DlocalRepositoryPath, например:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
-DlocalRepositoryPath=${master_project}/local-maven-repo

После установки файла JAR ваше репозиторий Maven может быть передано в репозиторий кода, и вся настройка не зависит от системы. (Рабочий пример в GitHub).

Я согласен, что привязка JAR к репозиторию исходного кода не является хорошей практикой, но в реальной жизни быстрые и грязные решения иногда лучше, чем полноценное репозиторий Nexus для размещения одного JAR, который вы не можете опубликовать.

Ответ 4

Создайте новую папку, скажем, 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]
java maven