문제

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

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

또한 Leiningen은 Clojure 프로젝트를위한 "lib"디렉토리를 유지하는 데 사용할 수 있습니까? 내 Clojure 프로젝트가 같은 항아리를 공유한다면 각각에 대해 별도의 사본을 유지하고 싶지 않습니다.

감사

도움이 되었습니까?

해결책

당신은 당신의 개인 항아리를 넣을 수 있습니다 lib/ 그리고 그들은 lein swank 그리고 같은 것; 이것은 실제로는 의존성 관리 도구를 사용하는 시점을 물리 치는 것 같습니다. 원하다 이러한 종속성 관리, Leiningen을 "오픈 소스 종속성 관리 도구"로 취급하고 조심할 수 있습니다. lein clean.

상황이 더욱 복잡해지면서, 더 많은 개인 항아리가 관련되어 있고, 진화하고, 당신은 그것들에 대한 몇 가지 버전 정보를 고려해야합니다.


(HR은 Leiningen- 특이 적 부품 컷오프 포인트를 의미합니다 ... Clojure Land의 일반 빌드 / 의존성 관리 툴링 스토리에 대한 정보는 아래에 있습니다.

또한 아직, Clojure를위한 최고의 빌드 도구 인 문제에 대한 보편적 인 합의는 없으며, Leiningen은 또한 Mindshare를 얻는 동안 영역에서 끊임없이 얻고 있습니다. 아직 완료되지 않았습니다. 다음은 Pragmatic Bookshelf의 "Programming Clojure"의 저자 인 Stuart Halloway의 인용문입니다. "My 2C : Leiningen은 중요한 단계이지만 여전히해야 할 일이 많습니다." 전체 게시 및 매우 흥미로운 토론 Re : Clojure Space의 도구 등을 구축하려면 Leiningen, Clojure 및 Libraries : 내가 무엇을 놓치고 있습니까? Clojure Google Group의 스레드. 많은 참가자들은 특히 리포지토리, 로컬 또는 기타에 포함되지 않은 지역 의존성이 필요하다고 언급하고 그러한 시나리오를 위해 그들이 제시 한 솔루션에 대해 자세히 설명합니다. 아마도 기능 세트가 성숙 할 때 문제를 해결할 수있는 것이 있거나 앞으로 문제를 해결할 수있는 것이 있는지 알 수 있습니까?

어쨌든, Leingingen은 실제로 몇 가지 복잡한 시나리오를 위해 아직 좋은 이야기를 준비하지 못할 수 있습니다. 이것이 당신의 사건에 해당 될 수 있다고 생각한다면 (그리고 당신이 개인 레포 아이디어를 고려한 후에도) 위에서 언급 한 스레드에서 가져온 Maven 기반 대안에 대한 링크가 있습니다. Polyglot Maven, Clojure-Maven-Plugin; 이 블로그 게시 Clojure와 함께 Maven을 사용하려는 사람들에게 유용한 것을 목표로합니다. 내가 기억 하듯이, Meikel Brandmeyer (Kotarak의 온라인 손잡이 아래에서)는 Clojuresque라는 Clojure라는 Clojure를 수용하기위한 플러그인과 함께 Gradle (그루비 빌드 시스템)을 사용합니다. 나는 그루비에 대한 첫 번째 일을 모르기 때문에 결코 그것을 시도한 적이 없지만, 그는 그것과 함께 아주 좋은 건물 행동을 운영한다고 주장하며 Maven과는 아무런 관련이 없다고 생각합니다. 우리 중 일부를 위해. :-)

다른 팁

그냥 사용하십시오 : 자원-경로 Project.clj 파일에서. 예를 들어 Siebel 서버에 연결하는 데 사용합니다. 방금 만들었습니다 자원 내 프로젝트 디렉토리의 디렉토리와 거기에있는 JAR 파일을 복사했습니다. 물론보다 일반적인 디렉토리를 사용할 수 있습니다.

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

그런 다음 레인 대답 Siebel Data Bean 인스턴스를 만들 수 있습니다

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

최신 Java 버전이있는 경우보다 일반적인 디렉토리를 위해 이와 같은 경로 사양에 와일드 카드를 사용할 수 있습니다.

:resource-paths ["/tmp/SiebelJars/*"]
  1. 프로젝트에서 디렉토리 작성 :

    mkdir maven_repository

  2. 이 저장소에 로컬 항아리를 추가하십시오.

    예를 들어,이 명령은 다음을 추가합니다 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과 함께 현지 항아리를 사용합니다 (복사 이후 변경)

나는 찾았다 lein pom; lein jar; lein install 라이브러리를 개발할 때 잘 작동합니다.

도서관 에서이 작업을 수행하면 신청서가 필요한 응용 프로그램이 필요하지 않고 사용합니다. :repositories foo 필수.


대안 적으로, lein do pom, jar, install 약간 더 간결합니다.


이것은 다른 사람과 마찬가지로 도서관을 호출 할 수 있습니다 :dependencies [[project-name "version"]]

나는 "올바른"접근 방식이 다음과 같습니다 개인 Maven 저장소를 만듭니다 항아리를 단일 위치에 보관할 수 있도록 모든 지점 등이 변경 사항을 선택할 수 있습니다. 이것은 당신이하는 일에 대한 과잉 일 수 있습니다. 이것들이 더 쉬운 방법인지 궁금합니다.

플러그인을 사용하고 싶을 수도 있습니다 lein-localrepo: https://github.com/kumarshantanu/lein-localrepo

최근 발전은 Phil 's입니다 s3-wagon-private Leiningen 용 플러그인 : https://github.com/technomancy/s3-wagon-private

이를 통해 유물을 비공개 원격 저장소에 게시 할 수 있습니다.

이 솔루션 중 어느 것도 저에게 효과가 없었습니다. 대신 로컬 리포지토리를 설치하고 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 ]

어쩌면 이것을 살펴보십시오 이전 답변, 나는 프로젝트에 로컬 리포지토리를 설정하기위한 단계별 지침을 제공합니다 (액세스 file://항아리를 설치할 수있는).

가장 좋은 옵션은 개인 JFROG/NEXUS ARTIFACTORY를 설정하고 스냅 샷/릴리스를 배치 한 다음 Project.clj의 리포지토리로 해당 인공물을 추가하는 것입니다.

다른 더 간단한 방법입니다

정적 HTTP 가장 간단한 개인 저장소는 정적 파일로 가득 찬 디렉토리를 가리키는 웹 서버입니다. 디렉토리가 Leingingen이 실행중인 기계에 로컬 인 경우 파일 : /// URL을 사용하여 해당 방식으로 배포 할 수 있습니다.

SCPSSH 공개 키가 이미있는 서버가 이미있는 경우 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를 통해 소비 할 수도 있습니다.

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

원래 소스가 여기 있습니다 https://github.com/technomancy/leiningen/blob/stable/doc/deploy.md

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top