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

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

Установите JAR в локальный repository Maven следующим образом:

 mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging= -DgeneratePom=true 

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

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

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

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

<версия>: версия файла eg -> 2.3

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

Справка

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

  com.sample sample 1.0 system ${project.basedir}/src/main/resources/yourJar.jar  

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

Лучшим вариантом для локальных файлов jar в качестве зависимости является создание локального репозитория maven. Такое репо – это не что иное, как правильная структура каталогов с файлами pom.

В моем примере: у меня есть мастер-проект в местоположении ${master_project} а subroject1 – на ${master_project}/${subproject1}

то я создаю mvn-repository в: ${master_project}/local-maven-repo

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

   local-maven-repo file:///${project.parent.basedir}/local-maven-repo   

Зависимость может быть указана как для любого другого репозитория. Это делает ваш repository pom независимым. Например, если желаемая банка доступна в центральном центре maven, вам просто нужно удалить ее из своего локального репо, и она будет вытащена из репо по умолчанию.

   org.apache.felix org.apache.felix.servicebinder 0.9.0-SNAPSHOT  

Последнее, но не менее важное: добавить файл jar в локальный repository с помощью переключателя -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-файла установлен таким образом, что mvn-репо может быть привязано к репозиторию кода, а вся настройка независима от системы. ( рабочий пример в github )

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

Создайте новую папку, скажем, local-maven-repo в корне вашего проекта Maven.

Просто добавьте локальное репо внутри вашего вашего pom.xml :

   local-maven-repo file:///${project.basedir}/local-maven-repo   

Затем для каждой внешней банки, которую вы хотите установить, зайдите в корень вашего проекта и выполните:

 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 id name artifact name version number system jar location  

Я хотел бы такое решение – использовать maven-install-plugin в файле pom:

   org.apache.maven.plugins maven-install-plugin 2.5.2   initialize  install-file   lib/yourJar.jar com.somegroup.id artefact-id xyz jar     

В этом случае вы можете выполнить mvn initialize и jar будет установлен в локальном репозитории maven. Теперь эта банка доступна на любом этапе maven на этом компьютере (не забудьте включить эту зависимость как любую другую зависимость от maven в pom с ). Также возможно связать установку jar, чтобы не initialize шаг, но любой другой шаг, который вам нравится.

Да, вы можете иметь, но это не очень хорошая идея.

Вместо этого установите все эти банки в maven repos

Также см

  • Как построить проект maven с помощью встроенных библиотек

Один из способов – загрузить его в свой собственный менеджер хранилища Maven (например, Nexus). Хорошая практика иметь собственный менеджер репозитория в любом случае.

Еще один хороший способ, который я недавно видел, – включить Maven Install Plugin в жизненный цикл сборки: вы объявляете в POM, чтобы установить файлы в локальный repository. Это немного, но небольшие накладные расходы, и никакого ручного шага не требуется.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

Добавьте свой собственный локальный JAR в файл POM и используйте его в maven build.

 mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar 

Например:

 mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar 

Затем добавьте его в POM следующим образом:

введите описание изображения здесь

Конечно, вы можете добавить банки в эту папку. Но, возможно, это не то, чего вы хотите достичь …

Если вам нужны эти банки для компиляции, проверьте этот связанный вопрос: могу ли я добавить банки в maven 2 build classpath без их установки?

Кроме того, прежде чем кто-либо подскажет это, НЕ используйте системную область.

командная строка :

 mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar 

Предпочтительным способом было бы создать собственный удаленный repository.

См. Здесь подробную информацию о том, как это сделать. Посмотрите раздел « Загрузка в удаленный repository ».

Еще один интересный случай – когда вы хотите иметь в своем проекте частные банки maven. Возможно, вы захотите сохранить возможности Maven для разрешения транзитивных зависимостей. Решение довольно просто.

  1. Создайте папки в вашем проекте
  2. Добавьте следующие строки в файл pom.xml

     ${pom.basedir}/libs/    local-maven-repository file://${local.repository.folder}  true   true    
  3. Откройте папку .m2 / repository и скопируйте структуру каталогов проекта, который вы хотите импортировать, в папку libs .

Например, предположим, что вы хотите импортировать зависимость

  com.mycompany.myproject myproject 1.2.3  

Просто запустите .m2 / repository, и вы увидите следующую папку

ком / MyCompany / MyProject / 1.2.3

Скопируйте все в свою папку libs (опять же, включая папки в .m2 / repository ), и все готово.

Я хочу поделиться кодом, в котором вы можете загрузить папку с банками. Это полезно, когда у провайдера нет общего репозитория, и вам нужно добавить много библиотек вручную. Я решил построить .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; public class CreateMavenRepoApp { private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars"; public static void main(String[] args) throws IOException { File directory = new File(); //get all the files from a directory PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8"); writer.println("rem "+ new Date()); File[] fList = directory.listFiles(); for (File file : fList){ if (file.isFile()){ String absolutePath = file.getAbsolutePath() ; Manifest m = new JarFile(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.

Также взгляните на …

 compile 

Зависимости Maven . Это значение по умолчанию, но я обнаружил, что в некоторых случаях явным образом устанавливаю эту область также Maven для поиска локальных библиотек в локальном репозитории.

Это короткий синтаксис для более новых версий:

 mvn install:install-file -Dfile= 

Он работает, когда JAR был создан Apache Maven – наиболее распространенным случаем. Затем он будет содержать pom.xml в подпапке каталога META-INF, который будет считаться по умолчанию.

Источник: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

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

Хотя общий репо – лучший ответ, если вы не можете сделать это по какой-то причине, тогда встраивание фляги лучше, чем локальное репо. Локальное содержимое репо может вызвать множество проблем, особенно с течением времени.

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

  mvn install:install-file -Dfile= -DgroupId= \ -DartifactId= -Dversion= -Dpackaging= 

Следуйте этой полезной ссылке, чтобы сделать то же самое с сайта mkyoung. Вы также можете проверить руководство maven для того же

По какой-то причине в веб-приложении, которое я обслуживаю, ни решение Alireza Fattahi, ни решение JJ Roman не работали правильно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не может включить банку в войну.

Единственный способ, которым мне удалось заставить его работать, было положить банку в /src/main/webapp/WEB-INF/lib/ а затем объединить ее с решением Fattahis или Roman.

Очень быстрый и грязный способ – указать на локальный файл:

  sample com.sample 1.0 system C:\DEV\myfunnylib\yourJar.jar  

Однако это будет жить только на вашей машине (очевидно), для совместного использования обычно имеет смысл использовать собственный архив m2 (nexus / artifactory) или если у вас нет ни одного из них или вы не хотите устанавливать его локальным maven структурированный архив и настроить «repository» в вашем pom: local:

   my-local-repo file://C:/DEV//mymvnrepo   

дистанционный пульт:

   my-remote-repo http://192.168.0.1/whatever/mavenserver/youwant/repo   

ДАННЫЙ ОТВЕТ ТОЛЬКО ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ЗАПИСИ:

Если вы используете Eclipse, поместите jar в lib /, щелкните правой кнопкой мыши на имени jar и нажмите «add to build path». Eclipse создаст «ссылки библиотек» и разместит банку для вас

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

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

 mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path 

У меня была такая же ошибка для набора зависимостей в моем pom.xml, что версии зависимостей не были указаны в pom.xml и упоминались в родительском репозитории. По какой-то причине сведения о версии не синхронизировались с этим репо. Следовательно, я вручную ввел версии с использованием тега, и он работал как шарм. Немного времени, необходимого для поиска версий в родительском и укажите здесь. Но это можно сделать только для банок, которые показывают артефактную ошибку, и это работает. Надеюсь, это поможет кому-то.

Я думаю, что лучшим решением этой проблемы является использование maven-install-plugin для автоматической установки файлов во время установки. Вот как я настроил его для своего проекта.

Сначала добавьте путь (где вы храните локальные .jars) в качестве свойства.

  /path/to/jar  

Затем под plugins добавьте плагин для установки баннеров при компиляции.

  org.apache.maven.plugins maven-install-plugin 2.5.2   1 initialize  install-file   com.local.jar appengine-api 1.0 jar ${local.sdk}/lib/impl/appengine-api.jar    appengine-api-stubs initialize  install-file   com.local.jar appengine-api-stubs 1.0 jar ${local.sdk}/lib/impl/appengine-api-stubs.jar     

Наконец, в зависимостях вы можете добавить банки

  com.local.jar appengine-api 1.0   com.local.jar appengine-api-stubs 1.0 test  

Создав свой проект таким образом, проект продолжит работу, даже если вы перейдете на другой компьютер (учитывая, что он имеет все файлы jar в пути, указанном свойством local.sdk ).

Для groupId используйте уникальное имя, чтобы убедиться, что конфликтов нет.

Теперь, когда вы mvn install или mvn test локальные банки автоматически добавляются.

  1. mvn install

Вы можете написать код ниже в командной строке или если вы используете eclipse builtin maven, щелкните правой кнопкой мыши по проекту -> Run As -> run configurations … -> в левой панели правой кнопкой мыши на Maven Build -> new configuration -> напишите код в Goals & in base directory: $ {project_loc: NameOfYourProject} -> Run

 mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging= -DgeneratePom=true 

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

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

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

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

<версия>: версия файла eg -> 2.3

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

2. После установки просто объявляет jar в pom.xml.

   com.google.code kaptcha 2.3  

У меня была такая же проблема с ojdbc6. Я видел эту ссылку, но она не работала. Команда была правильной, но мне нужен был еще один параметр,

Это ссылка: http://roufid.com/3-ways-to-add-local-jar-to-maven-project/

Вот пример:

 install:install-file -Dfile=C:\driversDB\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar 
Давайте будем гением компьютера.