java - run - leiningen test



leiningen-como adicionar dependências para jarros locais? (8)

  1. Crie um diretório no projeto:

    mkdir maven_repository

  2. Adicione jars locais a este repositório:

    Por exemplo, este comando adiciona o arquivo jaad-0.8.3.jar ao repositório maven:

    mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository

  3. Adicione o seguinte ao project.clj

    :repositories {"local" "file:maven_repository"}

  4. Agora, um lein deps regular deve funcionar:

    $ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING

O aviso pode ser ignorado, uma vez que o frasco será verificado no projeto e não será baixado da Internet.

Fonte original: Usando JARs locais com Leiningen (alterados desde a cópia)

Eu quero usar leiningen para construir e desenvolver meu projeto clojure. Existe uma maneira de modificar project.clj para dizer para escolher alguns frascos de diretórios locais?

Eu tenho alguns frascos proprietários que não podem ser enviados para repositórios públicos.

Além disso, o leiningen pode ser usado para manter um diretório "lib" para projetos clojure? Se vários dos meus projetos clojure compartilham os mesmos jars, não quero manter uma cópia separada para cada um deles.

obrigado


Answer #1

A melhor opção é configurar um artefato JFrog / Nexus privado e implantar seus snapshots / releases nele e, em seguida, incluir esse artifiactory como repositórios em seu project.clj

Outras formas mais simples são

HTTP Estático O tipo mais simples de repositório privado é um servidor da Web apontado em um diretório cheio de arquivos estáticos. Você pode usar um arquivo: /// URL em seus: repositórios para implementar dessa forma se o diretório for local para a máquina na qual o Leiningen está sendo executado.

SCP Se você já tem um servidor configurado com suas chaves públicas SSH, o transporte scp é uma maneira simples de publicar e consumir dependências privadas. Coloque o seguinte dentro do defproject:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]

Em seguida, coloque o seguinte fora do defproject:

(cemerick.pomegranate.aether/register-wagon-factory!
 "scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
          (clojure.lang.Reflector/invokeConstructor c (into-array []))))

Também é possível implantar em um repositório usando o transporte scp e consumir através de http, se você configurar nginx ou algo semelhante para servir o diretório do repositório sobre HTTP.

NB SCP implanta para Clojars não são mais suportados

A fonte original está aqui https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md


Answer #2

Apenas use : resource-paths em seu arquivo project.clj. Eu uso, por exemplo, para se conectar a servidores Siebel. Acabei de criar um diretório de recursos no diretório do meu projeto e copiei os arquivos jar nele. Mas é claro que você poderia usar um diretório mais genérico:

(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

Então, a partir da replicação de lein posso criar instâncias do Siebel Data Bean, por exemplo

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...

Se você tem uma versão mais recente do Java, é claro que você pode usar caracteres curinga na especificação do caminho, como este, para um diretório mais geral:

:resource-paths ["/tmp/SiebelJars/*"]

Answer #3

Eu acho lein pom; lein jar; lein install lein pom; lein jar; lein install lein pom; lein jar; lein install funciona bem ao desenvolver bibliotecas.

Faça isso na biblioteca que está sendo desenvolvida e seu aplicativo exigirá que ele seja usado sem nenhum :repositories requerido.

Alternativamente, lein do pom, jar, install é um pouco mais conciso.

Isso permite chamar a biblioteca como qualquer outra :dependencies [[project-name "version"]]


Answer #4

Nenhuma dessas soluções funcionou comigo. Em vez disso, instalei um repositório local e usei o maven para instalar o arquivo jar no repositório local e incluí o repositório local em meu projeto.clj

Na linha de comando:

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

E eu escrevo meu project.clj assim:

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

Espero que ajude.

[REFERÊNCIA: gist.github.com/stuartsierra/3062743 ]


Answer #5

Talvez dê uma olhada nesta resposta anterior , eu forneço instruções passo a passo para configurar um repositório local para o projeto (acessado através de file:// ) em que você poderia instalar seus jars.



Answer #7

Você poderia colocar seus jarros privados em lib/ e eles estariam no caminho de classe para os propósitos de lein swank e afins; isso parece frustrar o ponto de usar uma ferramenta de gerenciamento de dependências, mas se você não quer realmente que essas dependências sejam gerenciadas, pode tratar Leiningen como uma "ferramenta de gerenciamento de dependências de software livre" e talvez tenha cuidado com a lein clean .

À medida que a situação se torna mais complexa - há um número maior de frascos privados envolvidos, eles evoluem e você precisa levar em conta algumas informações sobre versionamento - a idéia de Arthur de criar um repositório privado do Maven pode ser mais apropriada.

(O RH significa o ponto de corte da parte específica de Leiningen ... Continue abaixo para obter informações sobre a história geral de ferramentas de gerenciamento de construção / dependência em Clojure, incluindo alguns links que eu acho que podem ser muito úteis em sua situação.)

Além disso, até o momento, não há acordo universal sobre qual é a melhor ferramenta de construção para o Clojure, e a Leiningen, enquanto ganha em mente, também está constantemente ganhando nas áreas de recursos e refinamento - o que significa, em particular, que ainda não está completo. Aqui está uma citação de Stuart Halloway, o autor de "Programming Clojure" da Pragmatic Bookshelf: "My 2c: Leiningen é um passo importante, mas ainda há muito o que fazer." Para a publicação completa e uma discussão muito interessante: ferramentas de construção e similares no espaço do Clojure, veja o Leiningen, Clojure e bibliotecas: o que estou perdendo? thread no grupo Google Clojure. Muitos participantes mencionam especificamente a necessidade de ter dependências locais não contidas em quaisquer repositórios, locais ou não, e elaborar as soluções que eles criaram para tais cenários. Talvez você possa ver se há algo ali que possa resolver seu problema agora / possa resolvê-lo no futuro, quando os conjuntos de recursos amadurecerem?

De qualquer forma, é possível que Leiningen não tenha, de fato, uma boa história pronta para alguns cenários complexos. Se você acha que isso pode ser verdade para o seu caso (e eu quero dizer depois de considerar a idéia de recompra privada), aqui estão alguns links para alternativas baseadas em maven tiradas do tópico acima mencionado: maven polyglot , clojure-maven-plugin ; Esta postagem no blog pretende ser útil para pessoas que tentam usar o maven com o Clojure. Pelo que me lembro, Meikel Brandmeyer (também em SO sob seu controle online de kotarak) usa Gradle (um sistema de compilação Groovy) com um plugin para acomodar Clojure chamado Clojuresque; Eu nunca tentei por mim mesmo, como não sei a primeira coisa sobre Groovy, mas ele alega ter um ótimo trabalho de construção e eu acredito que não tem nada a ver com o maven - algo que é um plus em si mesmo. para alguns de nós. :-)





leiningen