Maven: лучший способ связать пользовательский внешний JAR с моим проектом? - PullRequest
131 голосов
/ 17 апреля 2011

Это моя первая пара дней, изучающих Maven, и я все еще борюсь с основами. У меня есть внешний файл .jar (недоступный в общедоступных репозиториях), на который мне нужно сослаться в моем проекте, и я пытаюсь выяснить, какой мой лучший вариант.

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

1) Какой мой лучший вариант для добавления файла .jar к ссылкам моего проекта с помощью maven, если я хочу, чтобы и проект, и библиотека находились в управлении исходным кодом?

2) Я все еще не могу, чтобы Eclipse видел зависимость. Я вручную добавил его в раздел pom, и он хорошо отображается в списке зависимостей в m2eclipse. Компиляция mvn и пакет mvn завершаются успешно, но запуск программы приводит к:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        LibraryStuff cannot be resolved to a type

Это после редактирования POM как:

<dependency>
  <groupId>stuff</groupId>
  <artifactId>library</artifactId>
  <version>1.0</version>
  <systemPath>${lib.location}/MyLibrary.jar</systemPath>
  <scope>system</scope>
</dependency>

Должен ли я выполнять mvn install: install-file, даже если я уже думаю, что файл pom.xml отредактирован, как указано выше?

Спасибо!

Ответы [ 14 ]

3 голосов
/ 17 апреля 2011

pom.xml будет искать ваш локальный репозиторий, чтобы попытаться найти зависимость, соответствующую вашему артефакту. Кроме того, вам не следует использовать системные атрибуты scope или systemPath, они обычно зарезервированы для вещей, которые находятся в JDK, а не в JRE

См. вопрос , как установить артефакты maven.

2 голосов
/ 17 апреля 2011

Лучшее решение здесь - установить репозиторий: Nexus или Artifactory. Если у вас есть место для размещения подобных вещей, то это ускоряет процесс, кэшируя ваши вещи извне.

Если вы имеете дело с открытым исходным кодом, вы могли бы также рассмотреть вопрос о переводе в центральный.

См. руководство .

1 голос
/ 21 сентября 2017

С Eclipse Oxygen вы можете выполнять следующие действия:

  1. Поместить свои библиотеки в WEB-INF / lib
  2. Проект -> Настроить путь сборки -> Добавить библиотеку -> ИнтернетБиблиотека приложений

Maven примет их при установке проекта.

0 голосов
/ 15 июля 2015

Если внешний jar-файл создается только проектом Maven, вы можете скопировать весь проект в вашей системе и запустить

mvn install

в каталоге проекта. Это добавит jar в каталог .m2, который является локальным репозиторием maven.

Теперь вы можете добавить

<dependency>
     <groupId>copy-from-the=maven-pom-of-existing-project</groupId>
     <artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
     <version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>

Это гарантирует, что вы

mvn exec:java 

работает. Если вы используете предложенный здесь

<scope>system</scope>

Тогда вам придется добавлять классы по отдельности при выполнении через командную строку.

Вы можете добавить внешние банки с помощью следующей команды , описанной здесь

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