Leiningen не загружает зависимость после переустановки с тем же номером версии

Это действительно важно, и я в полном тупике и у меня крайний срок. Помощь приветствуется.

У меня есть проект Clojure под названием red-black, который, в частности, содержит файл с именем interval_tree.clj.

Я компилировал этот проект с помощью lein uberjar, а затем использовал полученный файл jar в других проектах, установив его в локальном репозитории maven.

mvn install:install-file  \   
    -Dfile=../red-black/target/red-black-0.1.0.jar  \  
    -DgroupId=self   \
    -DartifactId=red-black  \
    -Dversion=0.1.0  \
    -Dpackaging=jar  \
    -DgeneratePom=true  \
    -DcreateChecksum=true  \
    -DlocalRepositoryPath=local_mvn_repo

Сумасшествие в том, что я добавил новую функцию, скомпилировал свою банку и переустановил ее в локальном репозитории maven другого проекта, и теперь java не может найти мою новую функцию

user=> (red-black.interval-tree/tree-to-flat-list )
CompilerException java.lang.RuntimeException: No such var: red-black.interval-tree/tree-to-flat-list, compiling (NO_SOURCE_PATH:1:1)

Однако эта функция есть в red-black.interval-tree.clj! Я даже зашел в свой local_mvn_repo, разархивировал банку и посмотрел исходный код interval_tree.clj. Функция есть!

Что еще более странно, так это то, что другие функции из этой библиотеки доступны. Например, в моем втором проекте с локальным репозиторием mvn:

user=> (use 'red-black.interval-tree)
nil

Теперь немного магии вкладок:

user=> (red-black.interval-tree/
red-black.interval-tree/add-to-result        red-black.interval-tree/black                red-black.interval-tree/check-max-interval
red-black.interval-tree/get-color            red-black.interval-tree/get-hash             red-black.interval-tree/get-interval
red-black.interval-tree/get-key              red-black.interval-tree/get-left             red-black.interval-tree/get-max
red-black.interval-tree/get-parent           red-black.interval-tree/get-right            red-black.interval-tree/get-root
red-black.interval-tree/get-sentinel         red-black.interval-tree/get-value            red-black.interval-tree/has?
red-black.interval-tree/health-check         red-black.interval-tree/high                 red-black.interval-tree/insert
red-black.interval-tree/insert-fixup         red-black.interval-tree/left-rotate          red-black.interval-tree/low
red-black.interval-tree/max-of-three         red-black.interval-tree/new                  red-black.interval-tree/node
red-black.interval-tree/point-lookup         red-black.interval-tree/pretty-print         red-black.interval-tree/recursive-max
red-black.interval-tree/red                  red-black.interval-tree/right-rotate         red-black.interval-tree/set-color
red-black.interval-tree/set-interval         red-black.interval-tree/set-key              red-black.interval-tree/set-left
red-black.interval-tree/set-max              red-black.interval-tree/set-parent           red-black.interval-tree/set-right
red-black.interval-tree/set-root             red-black.interval-tree/set-value            red-black.interval-tree/update-max
user=> (red-black.interval-tree/

Но, как вы можете видеть, функция «дерево-в-плоский-список» отсутствует. Когда я вернусь в свой красно-черный проект и запущу repl, я могу просто вызвать проект find. Помощь! По состоянию на 5 часов назад я создавал новые методы в своем красно-черном проекте, компилировал свой uberjar и устанавливал его в своем другом проекте через локальную установку maven, и новые методы подхватывались просто отлично. Что-то, кажется, очень неправильно, пожалуйста, сообщите!

Обновлять:

Самостоятельный пример этой проблемы находится в этом архиве:

http://gorillamatrix.com/files/foo.tar.gz

Войдите в foo-two и lein repl. Попробуйте загрузить foo-two.core, вы должны увидеть это:

user=> (use 'foo-two.core)
CompilerException java.lang.RuntimeException: No such var: foo-one.core/bar, compiling:(foo_two/core.clj:6:2)

Однако foo-one.core/bar определенно определен!


person David Williams    schedule 25.05.2013    source источник


Ответы (1)


lein не обновляет уже извлеченный (из local_mvn_repo) .jar в .m2/repositories, если он имеет ту же версию (кажется), поэтому вы все еще используете первый полученный (он всегда будет использовать тот, который в .m2, а не в local_mvn_repo) Таким образом, вы можете либо увеличить версию, либо переустановить (убедитесь, что вы также обновили версию в своем проекте.clj проекта, который ее использует) или (если все еще используете ту же версию) просто удалите ее из / .m2/repositories, чтобы Лейн мог получить его снова (из local_mvn_repo)

person anonymous1    schedule 25.05.2013
comment
обратите внимание, что lein получит более новую версию, если версия -SNAPSHOT - person noisesmith; 26.05.2013