Я хочу, чтобы файл jar находился в третьей части библиотеки управления исходными кодами, и связывался с ней по относительному пути из файла pom.xml.
Если вы действительно хотите этого (понять, если вы не можете использовать корпоративное хранилище), то мой совет будет использовать «хранилище файлов» локальное для проекта и не использовать в system
контекстную зависимость. system
Scoped следует избегать таких зависимостей не работают хорошо во многих ситуациях (например , в сборе), они вызывают больше проблем , чем пользы.
Поэтому вместо этого объявите локальный репозиторий проекта:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
Установите свою библиотеку третьей стороны в нём , используя install:install-file
с localRepositoryPath
параметром:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
Обновление: похоже, что install:install-file
игнорирует localRepositoryPath
при использовании версии 2.2 плагина. Тем не менее, он работает с версией 2.3 и более поздней версии плагина. Поэтому используйте полное имя плагина для указания версии:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
maven-install-plugin документация
Наконец, объявите это как любую другую зависимость (но без system
области):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
Это ИМХО лучшее решение, чем использование system
области видимости, поскольку ваша зависимость будет рассматриваться как хороший гражданин (например, она будет включена в сборку и т. Д.).
Теперь я должен упомянуть, что «правильный способ» справиться с этой ситуацией в корпоративной среде (может быть, и не здесь) - это использовать корпоративный репозиторий.
localRepositoryPath
...basedir/./my-local-repo
один.
.Используя
system
объем.${basedir}
это каталог вашего пом.Тем не менее, желательно, чтобы вы установили свой jar в репозиторий, а не передавали его в SCM - в конце концов это то, что maven пытается устранить.
источник
Это еще один метод в дополнение к моему предыдущему ответу в разделе Могу ли я добавить jar-файлы в maven 2 buildpath classpath без их установки?
Это позволит преодолеть ограничение при использовании многомодульных сборок, особенно если на загруженный JAR ссылаются в дочерних проектах вне родительского. Это также уменьшает объем работ по настройке, создавая файлы POM и SHA1 как часть сборки. Это также позволяет файлу находиться в любом месте проекта, не фиксируя имен и не следуя структуре репозитория maven.
Это использует maven-install-plugin. Чтобы это работало, вам нужно настроить многомодульный проект и иметь новый проект, представляющий сборку, чтобы установить файлы в локальный репозиторий и убедиться, что он первый.
Ваш многомодульный проект pom.xml будет выглядеть так:
Файл repository / pom.xml будет содержать определения для загрузки JAR-файлов, которые являются частью вашего проекта. Ниже приведены некоторые фрагменты файла pom.xml.
Упаковка pom не позволяет выполнять какие-либо тесты, компилировать или генерировать jar-файл. Мясо pom.xml находится в разделе сборки, где используется maven-install-plugin.
Чтобы установить более одного файла, просто добавьте больше исполнений.
источник
Это работает для меня: допустим, у меня есть эта зависимость
Затем добавьте путь к классу для вашей системной зависимости вручную, как это
Полная конфигурация:
источник
Я ранее писал о шаблоне для этого.
Это очень похоже на решение, предложенное Паскалем, хотя оно перемещает все такие зависимости в выделенный модуль репозитория, чтобы вам не приходилось повторять его везде, где используется зависимость, если это многомодульная сборка.
источник
По сути, добавьте это в pom.xml:
источник
мы перешли на gradle, и в gradle это работает намного лучше;). мы просто указываем папку, в которую мы можем бросить банки для таких временных ситуаций. У нас все еще есть большинство наших jar-файлов, определенных в разделе управления зависимостями (т.е. так же, как в maven). Это еще одна зависимость, которую мы определяем.
так что теперь мы можем просто поместить любой jar-файл в нашу директорию lib для временного тестирования, если он не находится где-нибудь в репозитории maven.
источник
Небольшое дополнение к решению, опубликованному Паскалем
Когда я пошел по этому маршруту, я получил ошибку в maven при установке ojdbc jar.
После добавления -DpomFile проблема была решена.
источник
Вы можете использовать eclipse для создания исполняемого файла Jar: Export / Runable Jar
источник