Это моя первая пара дней, изучающих 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 уже отредактирован, как указано выше?
Спасибо!
mvn install::install-file
: mkyong.com/maven/…mvn install::install-file
в вашем локальном репозитории означало бы, что любой, кто клонирует ваш исходный код, должен будет также выполнить этот шаг вручную. В противном случае сборка будет нарушена «из коробки»Вы можете создать In Project Repository, чтобы вам не приходилось
run mvn install:install-file
каждый раз работать на новом компьютере./groupId/artifactId/version/artifactId-verion.jar
подробно читайте этот блог
https://web.archive.org/web/20121026021311/charlie.cu.cc/2012/06/how-add-external-libraries-maven
источник
mvn install:install-file
а затем скопировать всю структуру каталогов из локального репозитория в репозиторий внутри проекта.Это может быть легко достигнуто с помощью элемента <scope>, вложенного в элемент <dependency>.
Например:
Ссылка: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
источник
install
цель в зависимом проекте. Наличие системы с воздушным зазором и наличием всех плагинов, кроме плагина установки, является довольно редкой ситуацией."The POM for … is missing, no dependency information available” even though it exists in Maven Repository
В руководстве Maven сказано сделать это:
источник
Обновление С тех пор мы только что установили наш собственный сервер Nexus, намного проще и чище.
В нашей компании было несколько банок, которые были обычными, но не были размещены в репозиториях Maven, и мы не хотели, чтобы они были в локальном хранилище. Мы создали очень простое репозиторий mvn (public) на Github (но вы можете разместить его на любом сервере или локально):
обратите внимание, что это идеально подходит только для управления несколькими редко меняющимися файлами jar
Создать репо на GitHub:
https://github.com/<user_name>/mvn-repo/
Добавить репозиторий в pom.xml
(обратите внимание, что полный путь необработанного файла будет немного отличаться от имени репо)
Добавить зависимость от хоста (Github или частного сервера)
a. Все, что вам нужно знать, это то, что файлы хранятся в шаблоне, упомянутом @glitch
/groupId/artifactId/version/artifactId-version.jar
b. На вашем хосте создайте папки, соответствующие этому шаблону.
т.е. если у вас есть файл jar с именем
service-sdk-0.0.1.jar
, создайте папкуservice-sdk/service-sdk/0.0.1/
и поместитеservice-sdk-0.0.1.jar
в нее файл jar .с. Проверьте это, пытаясь загрузить банку из браузера (в нашем случае:
https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Добавьте зависимость в ваш файл pom.xml:
наслаждаться
источник
Не используйте systemPath. Вопреки тому, что люди сказали здесь, вы можете поместить внешний jar-файл в папку в вашем извлеченном каталоге проекта, и Maven найдет его, как и другие зависимости. Вот два важных шага:
Это довольно просто, и вы можете найти пошаговый пример здесь: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html
источник
Maven способ добавить не maven банок в проект maven
Maven Project и не maven банки
Добавьте плагины установки maven в ваш раздел сборки
Добавить зависимость
Список литературы Примечание Я владелец блога
источник
Если вы столкнулись с той же проблемой и используете spring-boot v1.4 + , вы можете сделать это следующим образом.
Есть includeSystemScope , который можно использовать для добавления зависимостей области системы в jar.
например
Я использую драйвер оракула в свой проект.
затем сделайте includeSystemScope = true, чтобы включить jar в путь / BOOT-INF / lib / **
и исключить из ресурса, чтобы избежать дублирования включения, банка достаточно жирная ~
Удачи!
источник
Измените ваш systemPath .
источник
Файл pom.xml рассмотрит ваш локальный репозиторий, чтобы попытаться найти зависимость, соответствующую вашему артефакту. Кроме того, вы не должны использовать системные атрибуты scope или systemPath, обычно они зарезервированы для вещей, которые находятся в JDK, а не в JRE.
Посмотрите этот вопрос о том, как установить артефакты Maven.
источник
Обратите внимание, что все примеры, которые используют
требуют внешнего
теги Это не ясно из некоторых примеров.
источник
Лучшее решение здесь - установить репозиторий: Nexus или Artifactory. If дает вам место для размещения подобных вещей, а в дальнейшем это ускоряет процесс, кэшируя ваши вещи извне.
Если вы имеете дело с открытым исходным кодом, вы также можете рассмотреть возможность размещения в центральном.
Смотрите руководство .
источник
С Eclipse Oxygen вы можете делать следующие вещи:
Maven возьмет их при установке проекта.
источник
Если внешний jar-файл создается только проектом Maven, вы можете скопировать весь проект в вашей системе и запустить
в каталоге проекта. Это добавит jar в каталог .m2, который является локальным репозиторием maven.
Теперь вы можете добавить
Это гарантирует, что вы
работает. Если вы используете предложенный здесь
Тогда вам придется добавлять классы индивидуально при выполнении через командную строку.
Вы можете добавить внешние jar с помощью следующей команды, описанной здесь
источник
Наиболее эффективный и чистый способ решения этой проблемы - использование пакетов Github.
Создайте простой пустой публичный / приватный репозиторий на GitHub согласно вашему требованию, хотите ли вы, чтобы ваш внешний jar был публично размещен или нет.
Запустите команду ниже maven, чтобы развернуть ваш внешний jar в вышеупомянутом репозитории github.
mvn deploy:deploy-file \ -DgroupId= your-group-id \ -DartifactId= your-artifact-id \ -Dversion= 1.0.0 -Dpackaging= jar -Dfile= path-to-file \ -DrepositoryId= id-to-map-on-server-section-of-settings.xml \ -Durl=https://maven.pkg.github.com/github-username/github-reponame-created-in-above-step
Приведенная выше команда развернет ваш внешний jar в репозитории GitHub, упомянутом в
-Durl=
. Вы можете сослаться на эту ссылку на Как развернуть зависимости как на GitHub Packages GitHub Package Deployment TutorialПосле этого вы можете добавить зависимость , используя
groupId
,artifactId
иversion
упомянутые в указанной выше стадии в мавенаpom.xml
и запуститьmvn install
Maven получит зависимость внешнего jar-файла из реестра GitHub Packages и предоставит его в ваш проект maven.
Для того, чтобы это работало, вам также нужно настроить maven's
settings.xml
для получения из реестра GitHub Package.источник