leiningen-로컬 jar에 대한 종속성을 추가하는 방법은 무엇입니까?


117

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

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

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

감사


1
모두 감사합니다. 제 모두가 지적했듯이 이것은 아직 명확한 답변이없는 어려운 문제입니다.
signaleeker 2010 년

답변:


38

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

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


(HR은 Leiningen 특정 부품 컷오프 지점을 의미합니다 ... Clojure 토지의 일반적인 빌드 / 종속성 관리 도구 이야기에 대한 정보를 보려면 아래에서 계속하십시오. 여기에는 귀하의 상황에서 매우 유용 할 수있는 링크가 포함되어 있습니다.)

또한 아직까지는 Clojure를위한 최고의 빌드 도구가 무엇인지에 대한 보편적 인 합의가 없으며, Leiningen은 마인드 쉐어를 획득하면서 지속적으로 기능과 세련미를 얻고 있습니다. 아직 완료되지 않았습니다. 다음은 Pragmatic Bookshelf의 "Programming Clojure"의 저자 인 Stuart Halloway의 인용문입니다. "My 2c : Leiningen은 중요한 단계이지만 여전히 할 일이 많습니다." 전체 게시물과 매우 흥미로운 토론에 대해서는 Clojure 공간에서 도구 등을 빌드하려면 Leiningen, Clojure 및 라이브러리를 참조하십시오. 내가 무엇을 놓치고 있습니까?Clojure Google 그룹의 스레드. 많은 참여자들은 특히 리포지토리에 포함되지 않은 로컬 종속성, 로컬 또는 기타 사항이 필요하다고 언급하고 이러한 시나리오에 대해 제시 한 솔루션에 대해 자세히 설명합니다. 현재 문제를 해결할 수있는 문제가 있거나 기능 세트가 성숙되면 향후 해결할 수있는 것이 있는지 확인할 수있을 것입니다.

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


2
Re : "Clojure를위한 최고의 빌드 도구가 무엇인지에 대한 보편적 인 합의가 없습니다."... 오늘 현재 Leiningen이 도망 치는 표준 인 것처럼 보입니다. 2013 년 설문 조사 결과 : lein-survey-2013.herokuapp.com/results
David J.

8
Leiningen v2부터 lib / 디렉토리 기능이 제거되었습니다. 참조 : github.com/technomancy/leiningen/wiki/…
Jared314

현재까지 Leiningen은 여전히 ​​가장 인기가 있지만 Boot도 인기가 있습니다.
Mars

64

그냥 사용 : 자원 경로 당신의 project.clj 파일입니다. 예를 들어 Siebel 서버에 연결하는 데 사용합니다. 내 프로젝트 디렉토리에 리소스 디렉토리를 만들고 거기에 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/*"]

Lein 2는 globbing을 지원하지 않지만 필요한 경우 github.com/dchelimsky/lein-expand-resource-paths 플러그인을 사용할 수 있습니다.
숙고

2
이것이 제가 지금까지 본 최고의 답변입니다. 로컬 mvn 설치가 더 이상 작동하지 않는 것 같습니다.
David Williams

7
uberjar는 종속성 클래스 파일을 추가하는 대신 jar에 종속성 jar를 추가하므로 uberjar에서는 작동하지 않습니다.
Tobias Domhan 2015

50
  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 사용 (복사 이후 변경됨)


이 링크에서 좋은 단계. 이것은 나에게 매우 도움이되었습니다.
goger

2
최신 버전에서는 install : install-file 대신 mvn deploy : deploy-file을 사용하고 -DlocalRepositoryPath = repo 대신 -Durl = file : repo를 지정할 수 있습니다. projects.clj에서 다음을 사용할 수 있습니다. : repositories { "local" "file : maven_repository"} 참조 : gist.github.com/stuartsierra/3062743 (질문을 편집했지만 여전히 승인이 필요함)
Tobias Domhan

33

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

개발중인 라이브러리에서이 작업을 수행하면이를 필요로하는 응용 프로그램에서 :repositoriesfoo 없이도 사용할 수 있습니다.


또는 lein do pom, jar, install약간 더 간결합니다.


이를 통해 다른 라이브러리와 마찬가지로 라이브러리를 호출 할 수 있습니다. :dependencies [[project-name "version"]]


3
다른 솔루션에 비해 이것은 매우 간단하고 작동합니다! Maven을 설치할 필요가 없습니다. 감사.
dkinzer 2013-07-28

lein 프로젝트 파일에서 결과 jar를 어떻게 참조합니까?
interstar

다른 :dependencies [[project-name "version"]]
것과

1
이것은 Windows에서도 잘 작동합니다. 이미 언급했듯이 maven을 설치할 필요가 없습니다. Windows에서 IntelliJ + Cursive로 시도해 보았고 완벽하게 작동합니다. Windows 명령 줄에서 "lein pom; lein jar; lein install"을 수행했습니다.
2013

4
당신은 lein install. 그것은 당신을 위해 항아리와 pom을 만들 것입니다.
neverfox 2017-10-25

15

"올바른"접근 방식은 개인 Maven Repository생성 하여 항아리를 단일 위치에 저장할 수 있고 모든 분기 등이 변경 사항을 적용하는 것이라고 생각합니다. 이것은 당신이하는 일에 과잉 일 수 있습니다. 이것이 더 쉬운 방법인지 궁금합니다.


5
감사합니다. 조사하겠습니다. 비록 maven이 내 마음에 두려움을 불러 일으킨다 고 말해야하지만. 이를 수행하는 간단한 단계별 예제를 알고 있다면 저에게 알려주십시오. 자바 세계에서 빌드가 왜 그렇게 복잡할까요?
signaleeker 2010 년



3

이 솔루션 중 어느 것도 저에게 효과가 없었습니다. 대신 로컬 저장소를 설치하고 maven을 사용하여 로컬 저장소에 jar 파일을 설치하고 로컬 저장소를 내 프로젝트에 추가했습니다.

명령 줄에서 :

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

그리고 다음과 같이 project.clj를 작성합니다.

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

도움이 되었기를 바랍니다.

[참조 : https://gist.github.com/stuartsierra/3062743 ]


2

아마도이 이전 답변을 살펴보면 file://항아리를 설치할 수 있는 프로젝트 (를 통해 액세스 됨 )에 로컬 저장소를 설정하는 단계별 지침을 제공 합니다.



0

가장 좋은 방법은 비공개 JFrog / Nexus 아티 팩토리를 설정하고 여기에 스냅 샷 / 릴리스를 배포 한 다음 해당 아티 팩토리를 프로젝트의 저장소로 추가하는 것입니다.

다른 간단한 방법은

정적 HTTP 가장 단순한 종류의 개인 저장소는 정적 파일로 가득 찬 디렉토리를 가리키는 웹 서버입니다. 디렉토리가 Leiningen이 실행되는 시스템에 로컬 인 경우 : repositories에서 file : /// URL을 사용하여 배포 할 수 있습니다.

SCP SSH 공개 키로 설정된 서버가 이미있는 경우 scp 전송은 비공개 종속성을 게시하고 사용하는 간단한 방법입니다. defproject 내부에 다음을 배치하십시오.

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

그런 다음 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 []))))

scp 전송을 사용하여 저장소에 배포하고 nginx 또는 HTTP를 통해 저장소 디렉토리를 제공하기 위해 유사한 것을 설정 한 경우 http를 통해 사용할 수도 있습니다.

Clojar에 배포되는 NB SCP는 더 이상 지원되지 않습니다.

원본 소스는 여기에 있습니다 https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.