Pergunta

Quero usar o Leiningen para construir e desenvolver meu projeto de clojure. Existe uma maneira de modificar o Project.clj para dizer para escolher alguns frascos de diretórios locais?

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

Além disso, Leiningen pode ser usado para manter um diretório "lib" para projetos de clojure? Se um monte de meus projetos de clojure compartilhar os mesmos frascos, não quero manter uma cópia separada para cada um deles.

Obrigado

Foi útil?

Solução

Você poderia colocar seus potes particulares em lib/ E eles estariam no caminho de classe para os propósitos de lein swank e similar; Isso parece derrotar o ponto de usar uma ferramenta de gerenciamento de dependência, embora se você realmente não querer Essas dependências gerenciadas, você pode tratar Leiningen como uma "ferramenta de gerenciamento de dependências de código aberto" e talvez tenha cuidado com lein clean.

À medida que a situação se torna mais complexa - há um número maior de frascos particulares envolvidos, eles evoluem e você precisa levar algumas informações de versão sobre elas - a idéia de Arthur de criar um repo MAVEN privado pode ser mais apropriada.


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

Além disso, até o momento, não há um acordo universal sobre a questão da qual é a melhor ferramenta de construção para Clojure, e Leiningen, enquanto ganha em Mindshare, também está constantemente ganhando nas características das áreas e polimento - significando, em particular, que Ainda não está completo. Aqui está uma citação de Stuart Halloway, autora de "Clojure de programação" da Pragmatic Bookshelf: "Meu 2C: Leiningen é um passo importante, mas ainda há muito o que fazer". Para a postagem completa e uma discussão muito interessante re: construir ferramentas e similares no espaço de clojure, veja o Leiningen, Clojure e Bibliotecas: O que estou perdendo? Thread no grupo Clojure Google. Muitos participantes mencionam especificamente a necessidade de ter dependências locais não contidas em nenhum repositório, local ou não, e elaborarem as soluções que eles criaram para esses cenários. Talvez você possa ver se há algo lá que possa resolver seu problema agora / pode resolvê -lo no futuro, quando os conjuntos de recursos maduros?

De qualquer forma, é possível que Leiningen não tenha uma boa história pronta para alguns cenários complexos. Se você acha que isso pode ser verdade no seu caso (e quero dizer depois de considerar a ideia de repo privada), aqui estão alguns links para alternativas baseadas em mavenes retiradas do tópico acima mencionado: Maven poliglota, Clojure-Maven-Plugin; esta postagem do blog pretende ser útil para as pessoas que tentam usar o Maven com Clojure. Pelo que me lembro, Meikel Brandmeyer (também em seu identificador on -line de Kotarak) usa o Gradle (um sistema de construção groovy) com um plug -in para acomodar a clojure chamada Clojuresque; Eu nunca tentei eu mesmo, pois não sei a primeira coisa sobre Groovy, mas ele afirma executar um ato de construção muito bom com ele e acredito que não tem nada a ver com maven - algo que é uma vantagem por si só para alguns de nós. :-)

Outras dicas

Apenas use : paths de recursos no seu arquivo Project.clj. Eu o uso, por exemplo, para conectar -se aos servidores Siebel. Acabei de criar um Recursos diretório no meu diretório de projeto e copiou os arquivos JAR lá. Mas é claro que você pode 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 do Lein Repl Eu posso criar instâncias de feijão de dados Siebel, por exemplo,

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

Se você tiver uma versão Java mais recente, é claro que pode usar curingas em sua especificação de caminho como esta para um diretório mais geral:

:resource-paths ["/tmp/SiebelJars/*"]
  1. Crie um diretório no projeto:

    mkdir maven_repository

  2. Adicione frascos locais a este repositório:

    Por exemplo, este comando adiciona o jaad-0.8.3.jar Arquivo para o 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 a project.clj

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

  4. Agora um regular lein deps Deveria trabalhar:

    $ 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, pois o frasco será verificado no projeto e não é baixado da Internet.

Fonte original: Usando o Jar's Local com Leiningen (mudou desde a cópia)

eu acho lein pom; lein jar; lein install Funciona bem ao desenvolver bibliotecas.

Faça isso na biblioteca que está sendo desenvolvida e seu aplicativo exigindo que o usará sem nenhum :repositories FOO NECESSÁRIO.


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


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

Eu acredito que a abordagem "correta" é para Crie um repositório privado Maven Para que você possa armazenar os frascos em um único local e todas as suas filiais etc. pegam as alterações. Isso pode ser um exagero pelo que você está fazendo. Estou curioso para saber se essa é uma maneira mais fácil.

Você pode gostar de usar o plugin lein-localrepo: https://github.com/kumarshantanu/lein-localrepo

Um desenvolvimento recente é Phil's s3-wagon-private Plugin para Leiningen: https://github.com/technomancy/s3-tagon-private

Isso deve permitir que você publique artefatos em um repositório remoto privado.

Nenhuma dessas soluções me funcionou. Em vez disso, instalei um repositório local e usei o Maven para instalar o arquivo JAR no repositório local e adicionei o repositório local ao 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 projeto.clj como este:

(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: https://gist.github.com/stuartsierra/3062743 ]

Talvez dê uma olhada nisso resposta anterior, Forneço instruções passo a passo para configurar um repositório local para o projeto (acessado por meio file://) em que você pode instalar seus frascos.

Experimente minha solução como criar arquivo jar com dependênciashttp://middlesphere-1.blogspot.ru/2014/06/how--make-jar-with-dependencies-using.html

Best option is to setup a private JFrog/Nexus artifactory and deploy your snapshots/releases there and then add that artifiactory as repositories in you project.clj

Other simpler ways are

Static HTTP The simplest kind of private repository is a web server pointed at a directory full of static files. You can use a file:/// URL in your :repositories to deploy that way if the directory is local to the machine on which Leiningen is running.

SCP If you already have a server set up with your SSH public keys, the scp transport is a simple way to publish and consume private dependencies. Place the following inside defproject:

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

Then place the following outside the 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 []))))

It's also possible to deploy to a repository using the scp transport and consume from it over http if you set up nginx or something similar to serve the repository directory over HTTP.

N.B. SCP deploys to Clojars are no longer supported

Original source is here https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top