IT박스

leiningen-지역 항아리에 의존성을 추가하는 방법?

itboxs 2020. 7. 27. 07:41
반응형

leiningen-지역 항아리에 의존성을 추가하는 방법?


leiningen을 사용하여 클로저 프로젝트를 빌드하고 개발하고 싶습니다. 로컬 디렉토리에서 항아리를 선택하도록 project.clj를 수정하는 방법이 있습니까?

공개 저장소에 업로드 할 수없는 독점적 인 항아리가 있습니다.

또한 leiningen을 사용하여 clojure 프로젝트에 대한 "lib"디렉토리를 유지할 수 있습니까? clojure 프로젝트가 동일한 항아리를 공유하는 경우 각각의 별도의 사본을 유지하고 싶지 않습니다.

감사


당신은 당신의 개인 항아리를 넣을 수 lib/있고 그들은 목적 등을 위해 클래스 패스에있을 것입니다 lein swank; 의존성 관리 도구를 사용하는 시점을 잃어 버리는 것처럼 보이지만 실제로 이러한 종속성을 관리 하지 않으 려면 Leiningen을 "오픈 소스 종속성 관리 도구"로 취급하고주의해야 할 수도 있습니다 lein clean.

상황이 복잡 해짐에 따라 많은 수의 개인 항아리가 생겨나 고 진화하고 일부 버전 정보를 고려해야합니다. 개인 Maven 저장소를 만드는 것에 대한 Arthur의 아이디어가 더 적절할 수 있습니다.


(HR은 Leiningen 관련 부품 컷오프 지점을 의미합니다. Clojure 랜드의 일반적인 빌드 / 종속성 관리 툴링 스토리에 대한 정보를 보려면 아래에서 계속하십시오. 여러분의 상황에서 매우 유용한 링크를 포함합니다.)

또한 아직 Clojure에 가장 적합한 빌드 도구라는 질문에 대한 보편적 인 합의가 없으며, Leiningen은 마음가짐을 얻는 동시에 기능 및 광택 영역에서 끊임없이 얻고 있습니다. 아직 완료되지 않았습니다. Pragmatic Bookshelf의 "Programming Clojure"의 저자 인 스튜어트 할로 웨이 (Stuart Halloway)의 인용문은 다음과 같습니다. "나의 2c : 라이닝 겐은 중요한 단계이지만 여전히 할 일이 많습니다." Clojure 공간에서 전체 도구를 게시하고 흥미로운 토론을 다시 작성하려면 Leiningen, Clojure 및 라이브러리를 참조하십시오 .Clojure Google 그룹의 스레드 많은 참여자들은 특히 지역 또는 그 밖의 어떤 리포지토리에도 포함되지 않은 로컬 종속성이 필요하며 이러한 시나리오를 위해 제시 한 솔루션에 대해 자세히 설명 할 필요가 있다고 언급합니다. 어쩌면 기능 세트가 성숙했을 때 문제를 지금 해결할 수있는 미래의 문제가 있는지 나중에 볼 수 있습니까?

어쨌든, Leiningen은 실제로 일부 복잡한 시나리오에 대한 좋은 이야기를 아직 준비하지 않았을 수 있습니다. 이것이 귀하의 경우에 해당한다고 생각되면 (그리고 개인 저장소 아이디어를 고려한 후에 의미합니다), 위에서 언급 한 스레드에서 가져온 maven 기반 대안으로 연결되는 링크는 다음과 같습니다. polyglot maven , clojure-maven-plugin ; 이 블로그 게시Clojure와 함께 maven을 사용하려는 사람들에게 유용합니다. 내가 기억 하듯이 Meikel Brandmeyer (또한 그의 온라인 코 타락 핸들 아래 SO)는 Clojuresque라는 Clojure를 수용하기위한 플러그인과 함께 Gradle (Groovy 빌드 시스템)을 사용합니다. Groovy에 대한 첫 번째 사실을 모르기 때문에 직접 시도하지는 않았지만 그는 매우 멋진 건물 행동을 취한다고 주장하며 maven과는 아무런 관련이 없다고 생각합니다. 우리 중 일부를 위해. :-)


그냥 사용 : 자원 경로 당신의 project.clj 파일입니다. 예를 들어 Siebel 서버에 연결하는 데 사용합니다. 내 프로젝트 디렉토리에 resources 디렉토리를 만들고 jar 파일을 거기에 복사했습니다. 물론 더 일반적인 디렉토리를 사용할 수 있습니다.

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

그런 다음 lein repl 에서 Siebel Data Bean 인스턴스를 만들 수 있습니다.

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

최신 Java 버전을 사용하는 경우보다 일반적인 디렉토리에 대해 다음과 같이 경로 지정에 와일드 카드를 사용할 수 있습니다.

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

  1. 프로젝트에서 디렉토리를 작성하십시오.

    mkdir maven_repository

  2. 이 저장소에 로컬 jar을 추가하십시오.

    예를 들어,이 명령은 jaad-0.8.3.jar파일을 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. 에 다음을 추가하십시오 project.clj

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

  4. 이제 정규식 lein deps이 작동해야합니다.

    $ 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

jar가 프로젝트에 체크인되고 인터넷에서 다운로드되지 않으므로 경고를 무시할 수 있습니다.

원본 출처 : Leiningen과 함께 로컬 JAR 사용 (복사 이후 변경)


내가 찾을 lein pom; lein jar; lein install라이브러리를 개발할 때 잘 작동합니다.

Do this in the library being developed and your application requiring it will use it without any :repositories foo required.


Alternatively, lein do pom, jar, install is slightly more concise.


This allows calling the library like any other :dependencies [[project-name "version"]]


I believe the "correct" approach is to create a private Maven Repository so that you can store the jars in a single location and all your branches etc will pick up the changes. This may be overkill for what your doing. I'm curious if these is an easier way.


You may like to use the plugin lein-localrepo: https://github.com/kumarshantanu/lein-localrepo


A recent development is Phil's s3-wagon-private plugin for Leiningen: https://github.com/technomancy/s3-wagon-private

This should allow you to publish artifacts to a private remote repo.


None of these solutions worked me. Instead I have installed a local repository, and used maven to install the jar file in the local repo, and added the local repo to my project.clj

In command line:

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

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"})

Hope it helps.

[REFERENCE: https://gist.github.com/stuartsierra/3062743 ]


Maybe have a look at this previous answer, I provide step by step instructions to setup a repository local to the project (accessed through file://) in which you could install your jars.


Try my solution how to build jar file with dependencies http://middlesphere-1.blogspot.ru/2014/06/how-to-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

참고URL : https://stackoverflow.com/questions/2404426/leiningen-how-to-add-dependencies-for-local-jars

반응형