Ao rodar um programa em clojure é comum que você precise utilizar funcionalidades de outras bibliotecas de clojure ou java.
Essas bibliotecas podem ser tanto algo que você está desenvolvendo localmente, quanto algum projeto disponível no github ou bibliotecas disponíveis no ecossistema do maven.
Clojure libraries Dependency Heaven
Em todos os casos, será necessário: [1] Especificar quais as bibliotecas utilizadas, e suas versões. [2] Baixar localmente essas dependências [3] Deixar essas bibliotecas disponíveis no path da JVM
Para [1] o clojure disponibiliza um arquivo de configuração (deps.edn) e a partir disso ele consegue garantir [2] e [3]
Mapa edn com 3 chaves top level:
- :deps
- :paths
- :aliases
:deps - mapa de bibliotecas para coordenar.
Bibliotecas são simbolos no formato <groupId>/<artifactId>
ou simplesmente <id>
.
Se o gruoId e o artifactID forem os mesmos, para declarar um identificador usar essa formula <groupId>/<artifactId>$<classifier>
coordinartes
-
Maven coordinate: {:mvn/version "1.2.3"}
- optional keys: :extension, :exclusions
-
Local project coordinate: {:local/root "/path/to/project"}
- Optional key :deps/manifest (project manifest type - default: auto-detect the project type (:deps or :pom)
-
Local jar: {:local/root "/path/to/file.jar"}
-
Git coordinate: {:git/url "https://github.com/user/project.git", :sha "sha", :tag "tag"}
- Required key :git/url can be one of the following:
- Required key :sha should indicate the full commit sha
- Optional key :tag is used only to indicate the semantics of the sha
- Optional key :deps/root (relative path within the root to search for the manifest file)
Vetor de string paths, geralmente relativo à raiz do projeto. Os paths declarados no vetor serão incluídos no classpath. e.g:
{:paths ["src"]}
Nomeiam estruturas de dados que podem ser utilizados tanto pelo clojure tools ou outros consumidores do deps.edn Podem ser utilizados com as flags:
-R - usa essas chaves ao expandir as dependências na etapa resolve-deps
:
- :extra-deps - a deps map from lib to coordinate of deps to add to the deps
- :override-deps - a deps map from lib to coordinate of override versions to use
- :default-deps - a deps map from lib to coordinate of versions to use if none is found
-C - usa essas chaves ao criar o classpath na etapa make-classpath
- :extra-paths - a collection of string paths to add to :paths
- :classpath-overrides - a map of lib to string path to replace the location of the lib
-O - usa essas chaves ao construir as JVM options
- :jvm-opts - a collection of string JVM options
-M - usa essas chaves ao constuit os argumentos para clojure.main
- :main-opts - a collection of clojure.main options
-A - ativa todas as chaves anteriores. As seguintes chaves só podem ser utilizadas com a flag -A
- :deps - a deps map from lib to coordinate of deps to REPLACE the project :deps
- :paths a collection of string paths to REPLACE project :paths
As coordinaets são interpretadas pelos procurers. Eles sabem determinar as dependencias de uma biblioteca e como baixar os artefatos. Atualmente os procurers disponíveis sãoL mvn
, local
, e git
.
Procrers podem guaradar atributos de configutração na raiz do deps.edn. O procurer vai buscar por :mvn/repos
que configuram os repositórios Maven padrão.
{:mvn/repos
{"central" {:url "https://repo1.maven.org/maven2/"}
"clojars" {:url "https://clojars.org/repo"}}}
guarde os dados de autenticação em ~/.m2/settings.xml
<settings>
...
<servers>
<server>
<id>my-auth-repo</id>
<username>zango</username>
<password>123</password>
</server>
...
</servers>
...
</settings>
{:deps
{my.library {:mvn/version "0.1.2"}}
:mvn/repos
{"my-private-repo" {:url "s3://my-bucket/maven/releases"}}}
Antes de tudo, garanta que as ferramentas do clojure estejam instaladas.