leiningen을 사용하여 클로저 프로젝트를 구축하고 개발하고 싶습니다. project.clj를 수정하여 로컬 디렉토리에서 항아리를 선택하도록 지시하는 방법이 있습니까?
공개 저장소에 업로드 할 수없는 독점 항아리가 있습니다.
또한 leiningen을 사용하여 clojure 프로젝트의 "lib"디렉토리를 유지할 수 있습니까? 여러 클로저 프로젝트가 동일한 항아리를 공유한다면 각각에 대해 별도의 사본을 유지하고 싶지 않습니다.
감사
leiningen을 사용하여 클로저 프로젝트를 구축하고 개발하고 싶습니다. project.clj를 수정하여 로컬 디렉토리에서 항아리를 선택하도록 지시하는 방법이 있습니까?
공개 저장소에 업로드 할 수없는 독점 항아리가 있습니다.
또한 leiningen을 사용하여 clojure 프로젝트의 "lib"디렉토리를 유지할 수 있습니까? 여러 클로저 프로젝트가 동일한 항아리를 공유한다면 각각에 대해 별도의 사본을 유지하고 싶지 않습니다.
감사
답변:
당신은 당신의 개인 항아리를 넣을 수 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과는 아무 관련이 없다고 생각합니다. 우리 중 일부를 위해. :-)
그냥 사용 : 자원 경로 당신의 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/*"]
프로젝트에 디렉토리를 만듭니다.
mkdir maven_repository
이 저장소에 로컬 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
다음에 추가 project.clj
:repositories {"local" "file:maven_repository"}
이제 정규직 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
라이브러리를 개발할 때 잘 작동합니다.
개발중인 라이브러리에서이 작업을 수행하면이를 필요로하는 응용 프로그램에서 :repositories
foo 없이도 사용할 수 있습니다.
또는 lein do pom, jar, install
약간 더 간결합니다.
이를 통해 다른 라이브러리와 마찬가지로 라이브러리를 호출 할 수 있습니다. :dependencies [[project-name "version"]]
:dependencies [[project-name "version"]]
lein install
. 그것은 당신을 위해 항아리와 pom을 만들 것입니다.
"올바른"접근 방식은 개인 Maven Repository 를 생성 하여 항아리를 단일 위치에 저장할 수 있고 모든 분기 등이 변경 사항을 적용하는 것이라고 생각합니다. 이것은 당신이하는 일에 과잉 일 수 있습니다. 이것이 더 쉬운 방법인지 궁금합니다.
플러그인을 사용할 수 있습니다 lein-localrepo
: https://github.com/kumarshantanu/lein-localrepo
최근 개발 된 것은 s3-wagon-private
Leiningen 용 Phil의 플러그인입니다. 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"})
도움이 되었기를 바랍니다.
종속성 http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html 을 사용하여 jar 파일을 빌드하는 방법 내 솔루션을 사용해보십시오 .
가장 좋은 방법은 비공개 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