Зависимости в локальных репозиториях maven с leiningen

Я запускаю проект lein new в clojure и хочу использовать библиотеку извлечения статей goose. К сожалению, я не смог найти банку этой библиотеки ни в одном общедоступном репозитории maven, поэтому решил добавить ее в локальный репозиторий maven.

В каталоге проекта я скопировал гусиную банку и ее файлы pom.xml и сделал

mkdir maven-repo
mvn install:install-file -Dfile=goose-2.1.6.jar -DartifactId=goose -Dversion=2.1.6 \
    -DgroupId=local -Dpackaging=jar -DlocalRepositoryPath=maven-repo -DpomFile=pom.xml

И добавил следующее в project.clj

:repositories {"local" ~(str (.toURI (java.io.File. "maven-repo")))}

и [local/goose "2.1.6"] в :dependencies. Теперь, когда я делаю lein deps, я получаю файл goose-2.1.6.jar, добавленный в каталог lib, но не зависимости от goose. Они перечислены в файле pom.xml гуся.

Есть ли способ исправить это, кроме как перечислить зависимости гуся в моем project.clj?


person Shrikant Sharat    schedule 05.01.2012    source источник


Ответы (1)


Вы можете использовать lein-localrepo вместо длинной команды mvn: https://github.com/kumarshantanu/lein-localrepo

Установите так:

lein localrepo coords target/goose-2.1.6.jar | xargs lein localrepo install

Однако это само по себе не поможет установить файл POM в репо. Вы должны дополнительно запустить это:

cp pom.xml ~/.m2/repository/goose/goose/2.1.6/goose-2.1.6.pom

Обратите внимание, что в этом примере Goose будет установлен как groupId=goose, artifactId=goose. Вы можете переопределить это, если хотите, и, вероятно, вам следует.

person Shantanu Kumar    schedule 05.01.2012
comment
Да, я видел ваш проект lien-localrepo до того, как прибегнул к длинной команде mvn. Я выбрал mvn, потому что это всего лишь одна команда :). В любом случае, я тоже попробую этот метод. Можете ли вы сказать мне, получит ли это зависимости от гуся, когда я сделаю lein deps? - person Shrikant Sharat; 05.01.2012
comment
Потрясающий. Используя этот метод, я получаю зависимости гуся в моем каталоге lib. Не могли бы вы объяснить немного больше, в чем разница? Спасибо большое чувак :) - person Shrikant Sharat; 05.01.2012
comment
Кроме того, как должны быть версионированы эти локальные банки? Все, о чем я могу думать, это добавить их в каталог поставщика и запустить приведенные выше команды localrepo в каждой системе, в которой клонируется этот проект. Есть ли лучший способ? - person Shrikant Sharat; 05.01.2012
comment
Ожидается, что артефакт pom.xml будет присутствовать как <artifactId>-<version>.pom в репозитории Maven, поэтому вы копируете pom.xml в качестве нового имени во второй команде выше. - person Shantanu Kumar; 05.01.2012
comment
Управление/версионирование локальных JAR-файлов зависит от того, что вам подходит. Если мне нужно это сделать, я бы сохранил их под одним идентификатором группы (например, onlylocal) и сохранил бы этот каталог в частном репозитории S3 или Github или где-либо еще, чтобы все члены моей команды могли клонировать один и тот же репозиторий. - person Shantanu Kumar; 05.01.2012