В инструкции по установке моей сборки было все, кроме части generatePom. Это кажется решающим.
Джейсон Д
4
<путь к файлу> что это значит? Например, C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... или мы можем сделать $ {project.basedir} /src/main/resources/myJar.jar
Игорь Боофилс
17
Ответ не упоминает README или то, что банки принесены с собой. Тем не менее, если проект приносит баночки, тогда вы можете также поместить репо в проект, как упомянуто здесь stackoverflow.com/a/36602256/1000011, тогда вам не нужно читать README, так как проект будет работать так, как будто баночки были в Maven Central без каких-либо дополнительных ручных шагов.
Оптически,
8
@opticyclic Ваш комментарий нуждается в большем количестве голосов, или этот ответ необходимо отредактировать. Это рецепт катастрофы для новичков, которые не понимают, что установка в локальный репозиторий Maven не будет включать для всех остальных.
В новых версиях эта функция помечена как устаревшая, но все еще работает и еще не удалена (вы просто видите предупреждение в журнале во время запуска maven). В группе maven возник вопрос об этом https://issues.apache.org/jira/browse/MNG-6523 (Вы можете принять участие и описать, почему эта функция полезна в некоторых случаях). Я надеюсь, что эта функция остается там!
Если вы спрашиваете меня, пока эта функция не удалена, я использую это для создания зависимости только от одного непослушного файла JAR в моем проекте, который не помещается в репозиторий. Если эта функция будет удалена, то здесь есть много хороших ответов, которые я могу выбрать позже!
Есть моменты, когда вы хотите специально протестировать, например, старую банку, и я думаю, что этот ответ хорошо подходит для этого. Это то, что мне было нужно. Проголосовал
Джон Локвуд
36
Как бы красиво и легко это не выглядело, у этого решения есть проблема, заключающаяся в том, что yourJar.jar не будет включен в WAR-файл для вашего приложения.
Матиас
40
Вышеупомянутое решение больше не работает, оно возвращает: «dependencies.dependency.systemPath для xx.jar не должно указывать на файлы в каталоге проекта». Это уже рассматривалось в stackoverflow.com/questions/10935135/…
sarah .ferguson
8
В этом ответе не так artifactIdи groupIdне наоборот?
Во-первых, я хотел бы отдать должное этому ответу анонимному пользователю Переполнения стека - я почти уверен, что видел подобный ответ раньше - но сейчас я не могу его найти.
Наилучшим вариантом для использования локальных файлов JAR в качестве зависимости является создание локального репозитория Maven. Такой репозиторий - не что иное, как правильная структура каталогов с файлами pom в нем.
Для моего примера: у меня есть основной проект на ${master_project}месте, и subproject1 включен ${master_project}/${subproject1}.
Затем я создать репозиторий Maven в:
${master_project}/local-maven-repo.
В файле pom в subproject1, расположенном по адресу ${master_project}/${subproject1}/pom.xml, необходимо указать хранилище, которое будет принимать путь к файлу в качестве параметра URL:
Зависимость может быть указана как для любого другого хранилища. Это делает ваш репозиторий POM независимым. Например, как только требуемый JAR будет доступен в Maven Central, вам просто нужно удалить его из локального репо, и он будет извлечен из репо по умолчанию.
После установки файла JAR репозиторий Maven может быть передан в репозиторий кода, и вся установка не зависит от системы. ( Рабочий пример в GitHub ).
Я согласен с тем, что использование JAR-файлов для репо с исходным кодом не является хорошей практикой, но в реальной жизни быстрые и грязные решения иногда лучше, чем полноценное репозиторий Nexus, для размещения одного JAR, который вы не можете опубликовать.
Это единственный правильный ответ, так как он будет правильно создавать репозиторий при использовании deploy.
opticyclic
Будет ли этот подход работать, если код развернут с использованием сервера сборки CI? Похоже, что автоматизированные сборки не будут иметь доступа к зависимости.
Уоллес Ховери
2
@ user2748659 да, если на ваших серверах сборки CI эта папка local-maven-repoвключена (как дочерний в этом примере) в вашу исходную папку
Энтони О.
3
Этот ответ - то, что работало для меня. Для общего проекта наличие репозитория в каталоге проекта и добавление в систему управления версиями гарантирует, что у всех, кто проверяет проект, не будет отсутствующих зависимостей. Если у вас много зависимостей, то, вероятно, лучшим решением будет совместное удаленное репо, в противном случае хранение репо в каталоге проекта вполне подойдет.
Акварель
2
Обратите внимание, что для этого вам может понадобиться добавить -Dpackaging = jar. В противном случае вы получите «информация об артефакте неполная или недействительная: упаковка отсутствует».
J Вудчак
43
Я хотел бы такое решение - использовать maven-install-pluginв файле pom:
В этом случае вы можете выполнить, mvn initializeи jar будет установлен в локальном репозитории Maven. Теперь этот jar-файл доступен во время любого шага maven на этом компьютере (не забудьте включить эту зависимость как любую другую зависимость maven в pom с <dependency></dependency>тегом). Также можно привязать jar install не к initializeшагу, а к любому другому шагу, который вам нравится.
Это хорошо работает для меня, но только если я запускаю mvn initializeраньше mvn package: я не могу mvn initialize packageили он пытается загрузить JAR из центрального репозитория. Почему это? Я думал, что это запустит эти цели / фазы в порядке.
DavidS
1
На самом деле, они должны быть запущены в порядке. Взгляните на список жизненного цикла по умолчанию: maven.apache.org/guides/introduction/… Вы можете использовать еще один шаг для привязки.
Sphinks
2
Я перепробовал все методы, но в итоге мне пришлось прибегнуть к этому решению. Основная причина в том, что я хотел иметь возможность собирать пакеты локально в автономном режиме. Если бы я объявил это как зависимость с локально определенным репозиторием, это всегда рассматривалось как просто еще одно онлайн-репо, и сборка maven жаловалась на то, что артефакт не был оштрафован. Это решение отлично работает для каждого случая.
Mauli
2
Я думаю, что лучше использовать чистую фазу, потому что инициализация будет выполняться каждый раз, когда мы используем пакет mvn, когда это не нужно. Наконец, если нам нужно только сгенерировать jar / war, мы можем напрямую использовать пакет mvn clean .
Deoxyseia
« Также возможно связать jar install не для инициализации шага, а для любого другого шага, который вам нравится». Это не обязательно так. Если в репозитории еще нет зависимости и используется фаза, которая следует после фазы, которая разрешает зависимости (например compile), сборка завершится неудачно.
GeroldBroser восстанавливает Монику
29
<dependency><groupId>group id name</groupId><artifactId>artifact name</artifactId><version>version number</version><scope>system</scope><systemPath>jar location</systemPath></dependency>
Однако это будет жить только на вашей машине (очевидно), для совместного использования обычно имеет смысл использовать надлежащий архив m2 (nexus / artifactory) или если у вас его нет или вы не хотите устанавливать локальный maven структурированный архив и настройте "хранилище" в вашем pom: local:
Я получил ошибку Не удалось установить артефакт (доступ запрещен). Как я могу решить это? @Aurasphere
Рамза Рехман
1
@RamzahRehman попробуйте открыть командную строку с привилегиями admi, щелкнув ее правой кнопкой мыши и выбрав «Запуск от имени администратора»
Aurasphere
9
Один из способов - загрузить его в свой собственный менеджер репозитория Maven (например, Nexus). В любом случае, хорошо иметь собственного менеджера хранилища.
Еще один приятный способ, который я недавно видел, - включить плагин установки Maven в жизненный цикл сборки: вы объявляете в POM для установки файлов в локальный репозиторий. Это небольшие, но небольшие накладные расходы и не требующие ручного шага.
В конечном итоге перейти на Gradle. Это не работает Если локальный jar определен как зависимости, maven не будет запускать плагины до разрешения зависимостей, ручная установка неизбежна. нашел обсуждение этой ситуации: stackoverflow.com/questions/5951999/…
xinthink
7
Конечно, вы можете добавить банки в эту папку. Но, может быть, это не то, что вы хотите достичь ...
Еще один интересный случай, когда вы хотите иметь в своем проекте приватные баночки maven. Возможно, вы захотите сохранить возможности Maven для разрешения транзитивных зависимостей. Решение довольно простое.
Я думаю, что лучшим решением для этой проблемы является использование maven-install-plugin для автоматической установки файлов во время установки. Вот как я настроил его для своего проекта.
Сначала добавьте путь (где вы храните локальные файлы .jars) в качестве свойства.
Если вы настроите свой проект следующим образом, он продолжит сборку, даже если вы перенесете его на другой компьютер (если в нем есть все файлы jar по пути, указанному в свойстве local.sdk).
Для groupIdиспользования уникального имени просто чтобы убедиться, что нет конфликтов.
Теперь, когда вы mvn installили mvn testместные банки будут добавлены автоматически.
Я хочу поделиться кодом, где вы можете загрузить папку, полную банок. Это полезно, когда у провайдера нет общедоступного репозитория, и вам нужно добавить множество библиотек вручную. Я решил создать .bat вместо вызова напрямую maven, потому что это может быть из-за нехватки памяти. Он был подготовлен для среды Windows, но его легко адаптировать к ОС Linux:
import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.jar.Attributes;import java.util.jar.JarFile;import java.util.jar.Manifest;publicclassCreateMavenRepoApp{privatestaticfinalString OCB_PLUGIN_FOLDER ="C://your_folder_with_jars";publicstaticvoid main(String[] args)throwsIOException{File directory =newFile();//get all the files from a directoryPrintWriter writer =newPrintWriter("update_repo_maven.bat","UTF-8");
writer.println("rem "+newDate());File[] fList = directory.listFiles();for(File file : fList){if(file.isFile()){String absolutePath = file.getAbsolutePath();Manifest m =newJarFile(absolutePath).getManifest();Attributes attributes = m.getMainAttributes();String symbolicName = attributes.getValue("Bundle-SymbolicName");if(symbolicName!=null&&symbolicName.contains("com.yourCompany.yourProject")){String[] parts =symbolicName.split("\\.");String artifactId = parts[parts.length-1];String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);String version = attributes.getValue("Bundle-Version");String mavenLine="call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);}}}
writer.close();}}
После запуска этого основного из любой IDE, запустите update_repo_maven.bat.
Ваш код String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))указывает на то, что будут поддерживаться только пользовательские файлы. Это не то, что нам нужно: вместо этого куча банок сторонних производителей. У вас есть предложения, как установить любую банку таким способом?
Джавадба
Я исправил ваш код: я поставил ответ внизу.
Джавадба
3
Это короткий синтаксис для более новых версий:
mvn install:install-file -Dfile=<path-to-file>
Это работает, когда JAR был построен Apache Maven - самый распространенный случай. Затем он будет содержать файл pom.xml в подпапке каталога META-INF, который будет читаться по умолчанию.
Maven Зависимости . Это значение по умолчанию, но в некоторых случаях я обнаружил, что Maven явно устанавливает эту область для поиска локальных библиотек в локальном хранилище.
По какой-то причине в веб-приложении, которое я поддерживаю, ни решение Alireza Fattahi, ни решение JJ Roman не работали правильно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не включает банку внутри войны.
Единственный способ, которым мне удалось заставить это работать, состоял в том, чтобы поставить банку /src/main/webapp/WEB-INF/lib/и затем объединить это с решением Фаттахиса или Романа.
Обратите внимание, что это НЕ обязательно хорошая идея использовать локальное репо. Если этим проектом поделятся с другими, тогда у всех будут проблемы и вопросы, когда он не будет работать, и баночка не будет доступна даже в вашей системе контроля версий!
Хотя общий репозиторий - лучший ответ, если вы не можете сделать это по какой-то причине, то встраивание jar лучше, чем локальное репо. Локальное репо может вызвать много проблем, особенно с течением времени.
если вы добавляете jar-файлы в систему управления версиями, библиотеки всегда будут доступны вместе с источником. Нет источника, нет библиотек. С maven вместо этого источник может быть в порядке, но хранилище недоступно.
sarah.ferguson
@Frank ... есть идеи о том, как создать исполняемый файл jar, не включая внешние зависимости (файлы библиотеки)?
Сатиш Карутури
Для кого-то новичка в maven и кто ищет ответ на оригинальный вопрос, что означает «встраивание банки»?
cdock
1
В вашем локальном хранилище вы можете установить свой jar, выполнив команды
Вы можете написать код ниже в командной строке или, если вы используете eclipse, встроенную в maven, щелкните правой кнопкой мыши по проекту -> Выполнить как -> запустить конфигурации ... -> в левой панели щелкните правой кнопкой мыши Maven Build -> новая конфигурация -> напишите код в Цели и в базовом каталоге: $ {project_loc: NameOfYourProject} -> Выполнить
Обязательно отредактируйте fileпуть в зависимости от вашего фактического пути к файлу (рекомендуется поместить эти внешние не maven файлы в какую-то папку, скажем lib, и поместить эту libпапку в ваш проект, чтобы использовать относительный путь для конкретного проекта и избегать добавления системы конкретный абсолютный путь.
Если у вас есть несколько внешних банок, просто повторите <execution>для других банок в том же maven-install-plugin.
Шаг 2: После того, как вы настроили maven-install-pluginкак показано выше в вашем pom.xmlфайле, вы должны использовать эти jar pom.xmlкак обычно:
Обратите внимание, что maven-install-pluginтолько ваши внешние jar копируются в локальный .m2репозиторий maven. Вот и все. Эти файлы не включаются автоматически как maven-зависимости в ваш проект.
У меня была такая же ошибка для набора зависимостей в моем pom.xml, оказалось, что версии зависимостей не были указаны в pom.xml и были упомянуты в родительском репозитории. По какой-то причине детали версии не синхронизировались с этим репо. Следовательно, я вручную вводил версии, используя тег, и он работал как шарм. Потребовалось немного времени, чтобы найти версии в родительском и указать здесь. Но это может быть сделано только для банок, которые показывают ошибку артефакта, и это работает. Надеюсь, это кому-нибудь поможет.
Если вы используете Eclipse, поместите банку в lib /, щелкните правой кнопкой мыши по названию баночки и нажмите «добавить в путь сборки». Eclipse создаст «библиотеки с ссылками» и разместит банку для вас
Это решило импорт банки сразу в программе для меня
Это добавит запись в Eclipse .classpath, но ваша сборка maven mvn packageбудет расширена, как только вы начнете использовать эту зависимость, так как maven не имеет ее определения, и это должно быть только вpom.xml
Пол Верест
да, вы правы, пакет не будет включать местную банку. Но я ответил на вопрос, как добавить его в проект (по типу затмения).
install-file
скриптов cmd .Ответы:
Установите JAR в ваш локальный репозиторий Maven следующим образом:
Где каждый относится к:
<path-to-file>
: путь к файлу для загрузки, например →c:\kaptcha-2.3.jar
<group-id>
: группа, в которой файл должен быть зарегистрирован, например, →com.google.code
<artifact-id>
: имя артефакта для файла, например →kaptcha
<version>
: версия файла, например, →2.3
<packaging>
: упаковка файла, например →jar
Ссылка
install:install-file
целиисточник
Вы можете добавить локальные зависимости напрямую (как упоминалось в проекте build maven с включенными в него библиотеками ) следующим образом:
Обновить
В новых версиях эта функция помечена как устаревшая, но все еще работает и еще не удалена (вы просто видите предупреждение в журнале во время запуска maven). В группе maven возник вопрос об этом https://issues.apache.org/jira/browse/MNG-6523 (Вы можете принять участие и описать, почему эта функция полезна в некоторых случаях). Я надеюсь, что эта функция остается там!
Если вы спрашиваете меня, пока эта функция не удалена, я использую это для создания зависимости только от одного непослушного файла JAR в моем проекте, который не помещается в репозиторий. Если эта функция будет удалена, то здесь есть много хороших ответов, которые я могу выбрать позже!
источник
artifactId
иgroupId
не наоборот?Во-первых, я хотел бы отдать должное этому ответу анонимному пользователю Переполнения стека - я почти уверен, что видел подобный ответ раньше - но сейчас я не могу его найти.
Наилучшим вариантом для использования локальных файлов JAR в качестве зависимости является создание локального репозитория Maven. Такой репозиторий - не что иное, как правильная структура каталогов с файлами pom в нем.
Для моего примера: у меня есть основной проект на
${master_project}
месте, и subproject1 включен${master_project}/${subproject1}
.Затем я создать репозиторий Maven в:
${master_project}/local-maven-repo
.В файле pom в subproject1, расположенном по адресу
${master_project}/${subproject1}/pom.xml
, необходимо указать хранилище, которое будет принимать путь к файлу в качестве параметра URL:Зависимость может быть указана как для любого другого хранилища. Это делает ваш репозиторий POM независимым. Например, как только требуемый JAR будет доступен в Maven Central, вам просто нужно удалить его из локального репо, и он будет извлечен из репо по умолчанию.
Последнее, но не менее важное, это добавление файла JAR в локальный репозиторий с помощью ключа -DlocalRepositoryPath, например, так:
После установки файла JAR репозиторий Maven может быть передан в репозиторий кода, и вся установка не зависит от системы. ( Рабочий пример в GitHub ).
Я согласен с тем, что использование JAR-файлов для репо с исходным кодом не является хорошей практикой, но в реальной жизни быстрые и грязные решения иногда лучше, чем полноценное репозиторий Nexus, для размещения одного JAR, который вы не можете опубликовать.
источник
${project.parent.basedir}
как в настоящее время, кажется, ни к чему не приводит, я использовал${project.basedir}/..
и работал отлично.<mirrorOf>*</mirrorOf>
.Создайте новую папку, скажем,
local-maven-repo
в корне вашего проекта Maven.Просто добавьте локальное репо внутри
<project>
вашегоpom.xml
:Затем для каждого внешнего jar, который вы хотите установить, перейдите в корень вашего проекта и выполните:
источник
local-maven-repo
включена (как дочерний в этом примере) в вашу исходную папкуЯ хотел бы такое решение - использовать
maven-install-plugin
в файле pom:В этом случае вы можете выполнить,
mvn initialize
и jar будет установлен в локальном репозитории Maven. Теперь этот jar-файл доступен во время любого шага maven на этом компьютере (не забудьте включить эту зависимость как любую другую зависимость maven в pom с<dependency></dependency>
тегом). Также можно привязать jar install не кinitialize
шагу, а к любому другому шагу, который вам нравится.источник
mvn initialize
раньшеmvn package
: я не могуmvn initialize package
или он пытается загрузить JAR из центрального репозитория. Почему это? Я думал, что это запустит эти цели / фазы в порядке.compile
), сборка завершится неудачно.источник
<scope>system
устарела сейчас.install:install-file
артефакт для локального репозитория и использование его в качестве «нормальной» зависимости (с областью действия по умолчаниюcompile
) или использование внутрикорпоративного решения для хранилища .Да, вы можете иметь, но это не очень хорошая идея.
Вместо этого установите все эти банки в репозитории Maven
Также см
источник
Очень быстрый и грязный способ - указать на локальный файл:
Однако это будет жить только на вашей машине (очевидно), для совместного использования обычно имеет смысл использовать надлежащий архив m2 (nexus / artifactory) или если у вас его нет или вы не хотите устанавливать локальный maven структурированный архив и настройте "хранилище" в вашем pom: local:
дистанционный пульт:
для этого также возможен относительный путь с помощью переменной basedir:
источник
<url>file:${basedir}</url>
вместо этого базовый URL.Добавьте свой собственный локальный JAR-файл в POM-файл и используйте его в сборке Maven.
Например:
Затем добавьте его в POM следующим образом:
источник
Один из способов - загрузить его в свой собственный менеджер репозитория Maven (например, Nexus). В любом случае, хорошо иметь собственного менеджера хранилища.
Еще один приятный способ, который я недавно видел, - включить плагин установки Maven в жизненный цикл сборки: вы объявляете в POM для установки файлов в локальный репозиторий. Это небольшие, но небольшие накладные расходы и не требующие ручного шага.
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
источник
Конечно, вы можете добавить банки в эту папку. Но, может быть, это не то, что вы хотите достичь ...
Если вам нужны эти jar для компиляции, проверьте следующий вопрос: Могу ли я добавить jar в maven 2 buildpath classpath без их установки?
Кроме того, прежде чем кто-либо предложит это, не используйте системную область.
источник
Еще один интересный случай, когда вы хотите иметь в своем проекте приватные баночки maven. Возможно, вы захотите сохранить возможности Maven для разрешения транзитивных зависимостей. Решение довольно простое.
Добавьте следующие строки в ваш файл pom.xml
Откройте папку .m2 / repository и скопируйте структуру каталогов проекта, который вы хотите импортировать, в папку libs .
Например, предположим, что вы хотите импортировать зависимость
Просто зайдите в .m2 / repository, и вы увидите следующую папку
ком / MyCompany / MyProject / 1.2.3
Скопируйте все в свою папку libs (опять же, включая папки в .m2 / repository ), и все готово.
источник
командная строка :
источник
Важная часть в зависимости: $ {pom.basedir} (вместо просто $ {basedir})
источник
Я думаю, что лучшим решением для этой проблемы является использование maven-install-plugin для автоматической установки файлов во время установки. Вот как я настроил его для своего проекта.
Сначала добавьте путь (где вы храните локальные файлы .jars) в качестве свойства.
Затем под
plugins
добавить плагин, чтобы установить банки при компиляции.Наконец, в зависимости, вы можете добавить банки
Если вы настроите свой проект следующим образом, он продолжит сборку, даже если вы перенесете его на другой компьютер (если в нем есть все файлы jar по пути, указанному в свойстве
local.sdk
).Для
groupId
использования уникального имени просто чтобы убедиться, что нет конфликтов.Теперь, когда вы
mvn install
илиmvn test
местные банки будут добавлены автоматически.источник
Предпочтительным способом было бы создать свой собственный удаленный репозиторий.
Смотрите здесь, чтобы узнать, как это сделать. Загляните в раздел « Загрузка в удаленный репозиторий ».
источник
Я хочу поделиться кодом, где вы можете загрузить папку, полную банок. Это полезно, когда у провайдера нет общедоступного репозитория, и вам нужно добавить множество библиотек вручную. Я решил создать .bat вместо вызова напрямую maven, потому что это может быть из-за нехватки памяти. Он был подготовлен для среды Windows, но его легко адаптировать к ОС Linux:
После запуска этого основного из любой IDE, запустите update_repo_maven.bat.
источник
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
указывает на то, что будут поддерживаться только пользовательские файлы. Это не то, что нам нужно: вместо этого куча банок сторонних производителей. У вас есть предложения, как установить любую банку таким способом?Это короткий синтаксис для более новых версий:
Это работает, когда JAR был построен Apache Maven - самый распространенный случай. Затем он будет содержать файл pom.xml в подпапке каталога META-INF, который будет читаться по умолчанию.
Источник: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
источник
Также взгляните на ...
Maven Зависимости . Это значение по умолчанию, но в некоторых случаях я обнаружил, что Maven явно устанавливает эту область для поиска локальных библиотек в локальном хранилище.
источник
По какой-то причине в веб-приложении, которое я поддерживаю, ни решение Alireza Fattahi, ни решение JJ Roman не работали правильно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не включает банку внутри войны.
Единственный способ, которым мне удалось заставить это работать, состоял в том, чтобы поставить банку
/src/main/webapp/WEB-INF/lib/
и затем объединить это с решением Фаттахиса или Романа.источник
Обратите внимание, что это НЕ обязательно хорошая идея использовать локальное репо. Если этим проектом поделятся с другими, тогда у всех будут проблемы и вопросы, когда он не будет работать, и баночка не будет доступна даже в вашей системе контроля версий!
Хотя общий репозиторий - лучший ответ, если вы не можете сделать это по какой-то причине, то встраивание jar лучше, чем локальное репо. Локальное репо может вызвать много проблем, особенно с течением времени.
источник
В вашем локальном хранилище вы можете установить свой jar, выполнив команды
Перейдите по этой полезной ссылке, чтобы сделать то же самое с веб-сайта mkyoung. Вы также можете проверить Maven руководство для того же
источник
Чтобы установить сторонний jar, пожалуйста, наберите команду, как показано ниже
источник
Вы можете написать код ниже в командной строке или, если вы используете eclipse, встроенную в maven, щелкните правой кнопкой мыши по проекту -> Выполнить как -> запустить конфигурации ... -> в левой панели щелкните правой кнопкой мыши Maven Build -> новая конфигурация -> напишите код в Цели и в базовом каталоге: $ {project_loc: NameOfYourProject} -> Выполнить
Где каждый относится к:
<путь к файлу>: путь к файлу для загрузки, например -> c: \ kaptcha-2.3.jar
<идентификатор группы>: группа, в которой файл должен быть зарегистрирован, например, -> com.google.code
<идентификатор артефакта>: имя артефакта для файла, например -> капча
<версия>: версия файла, например -> 2.3
<упаковка>: упаковка файла, например -> банка
источник
Шаг 1: Настройте
maven-install-plugin
с цельюinstall-file
в вашемpom.xml
Обязательно отредактируйте
file
путь в зависимости от вашего фактического пути к файлу (рекомендуется поместить эти внешние не maven файлы в какую-то папку, скажемlib
, и поместить этуlib
папку в ваш проект, чтобы использовать относительный путь для конкретного проекта и избегать добавления системы конкретный абсолютный путь.Если у вас есть несколько внешних банок, просто повторите
<execution>
для других банок в том жеmaven-install-plugin
.Шаг 2: После того, как вы настроили
maven-install-plugin
как показано выше в вашемpom.xml
файле, вы должны использовать эти jarpom.xml
как обычно:Обратите внимание, что
maven-install-plugin
только ваши внешние jar копируются в локальный.m2
репозиторий maven. Вот и все. Эти файлы не включаются автоматически как maven-зависимости в ваш проект.Это мелочь, но иногда ее легко пропустить.
источник
У меня была такая же ошибка для набора зависимостей в моем pom.xml, оказалось, что версии зависимостей не были указаны в pom.xml и были упомянуты в родительском репозитории. По какой-то причине детали версии не синхронизировались с этим репо. Следовательно, я вручную вводил версии, используя тег, и он работал как шарм. Потребовалось немного времени, чтобы найти версии в родительском и указать здесь. Но это может быть сделано только для банок, которые показывают ошибку артефакта, и это работает. Надеюсь, это кому-нибудь поможет.
источник
В Apache Maven 3.5.4 мне пришлось добавить двойные кавычки. Без двойной цитаты это не сработало для меня.
пример: mvn install: install-file "-Dfile = расположение в файле jar" "-DgroupId = идентификатор группы" "-DartifactId = идентификатор артефакта" "-Dversion = версия" "-Dpackaging = тип пакета"
источник
источник
ЭТОТ ОТВЕТ ТОЛЬКО ДЛЯ ПОТРЕБИТЕЛЕЙ:
Если вы используете Eclipse, поместите банку в lib /, щелкните правой кнопкой мыши по названию баночки и нажмите «добавить в путь сборки». Eclipse создаст «библиотеки с ссылками» и разместит банку для вас
Это решило импорт банки сразу в программе для меня
источник
.classpath
, но ваша сборка mavenmvn package
будет расширена, как только вы начнете использовать эту зависимость, так как maven не имеет ее определения, и это должно быть только вpom.xml