Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
'file:' repositories in Leiningen 2.0.0-preview5 and later

Sample Project

Starting from:

lein new foo
cd foo

Say I have a random JAR file that is not available in any repository:

jar cf bar.jar

Let's assume I've installed it in a project-local repository like this:

mkdir repo
mvn install:install-file -DgroupId=local -DartifactId=bar \
    -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \

And I write my project.clj like this:

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/bar "1.0.0"]]
  :repositories {"project" "file:repo"})

With Lein 2.0.0-preview4

Making sure my local cache is clean:

$ rm -rf ~/.m2/repository/local

The first time, Leiningen prints errors:

$ lein deps
Could not find artifact local:bar:pom:1.0.0 in central (
Could not find artifact local:bar:pom:1.0.0 in clojars (
Retrieving local/bar/1.0.0/bar-1.0.0.pom (1k)from file:repo/
no supported algorithms found
Could not find artifact local:bar:jar:1.0.0 in central (
Could not find artifact local:bar:jar:1.0.0 in clojars (
Retrieving local/bar/1.0.0/bar-1.0.0.jar (1k)from file:repo/
no supported algorithms found

But the second time it works:

$ lein deps

Some inspection shows that local/bar has been copied to my ~/.m2/repository cache:

$ find ~/.m2/repository/local

With Lein 2.0.0-preview5 through preview7

Starting from scratch:

$ rm -rf ~/.m2/repository/local

Try running Leiningen:

$ lein deps
Could not find artifact local:bar:pom:1.0.0 in central (
Could not find artifact local:bar:pom:1.0.0 in clojars (
Retrieving local/bar/1.0.0/bar-1.0.0.pom (1k)from file:repo/
Could not transfer artifact local:bar:pom:1.0.0 from/to project (file:repo): no supported algorithms found
Failed to collect dependencies for [#<Dependency org.clojure:clojure:jar:1.4.0 (compile)> #<Dependency local:bar:jar:1.0.0 (compile)>]

No matter how many times I run it, I get the same results. My ~/.m2/repository cache has the correct directories, but no files have been copied:

$ find ~/.m2/repository/local

The Repository URL

Variations on the repository URL like file://repo have no positive effect.

Copy link

stuartsierra commented Jul 7, 2012

The solution, courtesy of Nelson Morris, is to use mvn deploy:deploy-file instead of install:install-file, and to specify -Durl=file:repo instead of -DlocalRepositoryPath=repo.

The final command looks like this:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
  -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \

This tells Maven to create the checksums and additional metadata that is expected from a real repository, which makes Leiningen's dependency resolution work again.

Here's the mailing list discussion.

Copy link

jeroenvandijk commented Aug 10, 2012

This works for me! Thanks a lot!

Copy link

defHLT commented Sep 22, 2013

Thank you. Not being acquired both with maven and lein it took me a day of googling and retrying. Errors are extremely not helpful.

Copy link

jfacorro commented Oct 6, 2013

@liverlin Same here :)

Copy link

escheffel commented Apr 25, 2014

Hi there,

How does the above method (deploy:deploy-file) work when I want to copy a JAR file into a local maven repo which possesses as a dependency a local JNI-created dynamically linked library in some native language such as C? The two files "file1.jar" and "" always have to be deployed jointly. Thanks for any help!

Copy link

IvanDyachenko commented Nov 14, 2014

Thanks for solution!

Copy link

aaronblenkush commented Nov 10, 2015

To get the Lein 2 equivalent of @stuartsierra's command above without using Maven:

Add to project.clj:

:repositories [["project" {:url "file:repo" username "" :password ""}]]

Run lein deploy [repo] [artifact] [version] [jar-path]

lein deploy project local/bar 1.0.0 bar.jar

Then you can add the dependency to project.clj as:

[local/bar "1.0.0"]

Copy link

coxchen commented Dec 3, 2015

@aaronblenkush thanks a lot!!!

Copy link

zot commented Sep 20, 2016

Thanks, this worked for me!

Copy link

benwhorwood commented Jan 19, 2017

Thanks @aaronblenkush, worked for me to get a third party JDBC driver added to a project and available on the class path ((:import works as well as specifying class for java.jdbc connection).

Copy link

cpwnd commented Nov 19, 2019

@aaronblenkush Also worked for me with leiningen 2.9! The deploy command did the trick.
But then I only had to add :checksum :ignore for the local repo, because the checksum tests failed on retrieving.

    :repositories [["project" {:url "file:repo" :username "" :password "" :checksum :ignore}]]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment