Eu quero usar o leiningen para construir e desenvolver meu projeto clojure. Existe uma maneira de modificar o project.clj para dizer a ele para escolher alguns jars dos diretórios locais?
Tenho alguns jars proprietários que não podem ser carregados em 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 de clojure compartilharem os mesmos jars, não quero manter uma cópia separada para cada um deles.
obrigado
Respostas:
Você poderia colocar seus frascos privados
lib/
e eles estariam no caminho de classe para fins delein swank
e semelhantes; isso parece anular o uso de uma ferramenta de gerenciamento de dependências, embora se você realmente não quiser que essas dependências sejam gerenciadas, você poderia tratar Leiningen como uma "ferramenta de gerenciamento de dependências de código aberto" e talvez tenha cuidadolein clean
.Conforme a situação se torna mais complexa - há um número maior de jars privados envolvidos, eles evoluem e você precisa levar em consideração algumas informações de versão sobre eles - a ideia de Arthur de criar um repositório Maven privado pode ser mais apropriada.
(O RH significa o ponto de corte da peça 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 terras Clojure, incluindo alguns links que acho que podem ser muito úteis na sua situação.)
Além disso, até o momento, não há um acordo universal sobre a questão de qual é a melhor ferramenta de construção para Clojure, e Leiningen, enquanto ganha em participação, também está constantemente ganhando nas áreas de recursos e polimento - o que significa, em particular, que ainda não está completo. Aqui está uma citação de Stuart Halloway, autor de "Programming Clojure" do 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 sobre ferramentas de construção e similares no espaço Clojure, consulte Leiningen, Clojure e bibliotecas: o que estou perdendo?tópico 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 elaboram as soluções que eles criaram para tais cenários. Talvez você possa ver se há algo lá que pode resolver seu problema agora / pode resolvê-lo no futuro, quando os conjuntos de recursos amadurecerem?
De qualquer forma, é possível que Leiningen ainda 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 repositório privado), aqui estão alguns links para alternativas baseadas em maven retiradas do tópico mencionado acima: polyglot maven , clojure-maven-plugin ; esta postagem do blogpretende ser útil para pessoas que tentam usar o maven com Clojure. Pelo que me lembro, Meikel Brandmeyer (também no SO sob seu nome online de kotarak) usa Gradle (um sistema de compilação Groovy) com um plugin para acomodar Clojure chamado Clojuresque; Eu nunca tentei, pois não sei nada sobre o Groovy, mas ele afirma ter uma ótima construção com ele e acredito que não tenha nada a ver com o maven - algo que é um ponto positivo por si só para alguns de nós. :-)
fonte
Basta usar : resource-path em seu arquivo project.clj. Eu o uso, por exemplo, para me conectar a servidores Siebel. Acabei de criar um diretório de recursos no diretório do meu projeto e copiei os arquivos jar lá. Mas é claro que você pode usar um diretório mais genérico:
Então, a partir do lein repl , posso criar instâncias do Siebel Data Bean, por exemplo
Se você tiver uma versão mais recente do Java, é claro que pode usar curingas na especificação do caminho como este para um diretório mais geral:
fonte
Crie um diretório no projeto:
mkdir maven_repository
Adicione jars locais a este repositório:
Por exemplo, este comando adiciona o
jaad-0.8.3.jar
arquivo 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
Adicione o seguinte a
project.clj
:repositories {"local" "file:maven_repository"}
Agora, um regular
lein deps
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, pois o jar será verificado no projeto e não baixado da internet.
Fonte original: usando JARs locais com Leiningen (alterado desde a cópia)
fonte
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 que requer isso irá usá-lo sem qualquer
:repositories
foo necessário.Como alternativa,
lein do pom, jar, install
é um pouco mais conciso.Isso permite chamar a biblioteca como qualquer outro
:dependencies [[project-name "version"]]
fonte
:dependencies [[project-name "version"]]
lein install
. Isso vai construir o jarro e o pom para você.Eu acredito que a abordagem "correta" é criar um Repositório Maven privado para que você possa armazenar os jars em um único local e todas as suas filiais etc irão pegar as mudanças. Isso pode ser um exagero para o que você está fazendo. Estou curioso para saber se essa é uma maneira mais fácil.
fonte
Você pode querer usar o plugin
lein-localrepo
: https://github.com/kumarshantanu/lein-localrepofonte
Um desenvolvimento recente é o
s3-wagon-private
plugin de Phil para Leiningen: https://github.com/technomancy/s3-wagon-privateIsso deve permitir que você publique artefatos em um repo remoto privado.
fonte
Nenhuma dessas soluções funcionou comigo. Em vez disso, instalei um repositório local e usei o maven para instalar o arquivo jar no repo local e adicionei o repo local ao meu project.clj
Na linha de comando:
E eu escrevo meu project.clj assim:
Espero que ajude.
[REFERÊNCIA: https://gist.github.com/stuartsierra/3062743 ]
fonte
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 por meio
file://
) no qual você pode instalar seus jars.fonte
Tente minha solução como criar um arquivo jar com dependências http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
fonte
A melhor opção é configurar um artifactory JFrog / Nexus privado e implantar seus instantâneos / lançamentos lá e, em seguida, adicionar esse artifiactory como repositórios em seu project.clj
Outras maneiras mais simples são
HTTP estático O tipo mais simples de repositório privado é um servidor web apontado para um diretório cheio de arquivos estáticos. Você pode usar um arquivo: /// URL em seus: repositórios para implantar dessa forma se o diretório for local para a máquina em que 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 defeito interno:
Em seguida, coloque o seguinte fora do defeito:
Também é possível implantar em um repositório usando o transporte scp e consumir dele por http se você configurar o nginx ou algo semelhante para servir o diretório do repositório por HTTP.
NB SCP implantações para Clojars não são mais suportadas
A fonte original está aqui https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
fonte