2017-11-28 1 views
1

현재 전화를 걸어 간단한 cli를 실행했습니다. lein run my-cli-command arg --option외부 명령없이 내 명령을 실행할 수 있습니까?

lein 실행을 포함하지 않고 명령을 호출하려면 어떻게해야합니까? 이것은 내가 무엇을했는지입니다. my-cli-command arg --option

이진 파일이나 실행 파일로 변환해야합니까? 그렇다면 어떻게해야합니까?

답변

3

내가 아는 한, 단지 my-cli-command arg --option을 실행할 방법이 없습니다.

당신은 비록 자바 아카이브 작성하여 방정식에서 lein을 수행 할 수 있습니다

lein uberjar 

그런 다음 항아리를 실행을 같이 다른 모든 :

java -jar target/my-cli-command-standalone.jar arg --option 

uberjar을 기반으로 단지 이름을합니다 project.clj에서 프로젝트를 호출 한 후 외부 종속성에 의존하는 jar 파일과 (standalone) 외부 종속성을 사용하는 jar 파일을 만듭니다.

그런 다음 @gary가 지적한대로 java - jar ... 명령을 .bat 파일에 붙여 원하는 이름을 지정한 다음 직접 박쥐를 실행할 수 있습니다. 내 bat -Fu는 매우 약하지만, 인수를 배트에 전달하여 항아리로 전달하여 인수를 하드 코딩 할 필요가 없습니다.

+0

"당신이 원했던 것처럼 당신이 부를 수 있습니다. 스크립트는'java -jar target/my-cli-command-standalone.jar '처럼 보일 것입니다. ' – Gary

+0

@Gary 예. 나는 선전문을 추가하려고 노력할 것이다. – Carcigenicate

2

나는 그것을 사용하지 않았지만, inlein이 존재하고 그것이 필요한 것처럼 보입니다.

Inlein은 Clojure 스크립트를 실행하는 가장 쉽고 빠른 방법입니다. 의존성을 인라인하고, 속어 줄을 추가하고, 스크립트 파일을 실행 가능하게 만들면됩니다.

그리고 최소한의 예 : https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable

에 설명 된대로

#!/usr/bin/env inlein 

'{:dependencies [[org.clojure/clojure "1.8.0"]]} 

(println "hello world!") 
+0

이것은 굉장합니다! –

1

당신은 기본적으로 단일 쉘에서 쉘 스크립트와 uberjar를 연결할 수 있습니다 쉘 스크립트에서 "진 페이로드"를 사용할 수 있습니다 스크립트 파일을 만들고 스크립트에서 클래스 경로의 jar 파일로 해당 스크립트를 지정하여 java를 실행합니다. 예는 링크 된 게시물에서 온 것입니다.

러너 스크립트 저장 stub.sh에서 t :

#!/bin/sh 
MYSELF=`which "$0" 2>/dev/null` 
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0" 
java=java 
if test -n "$JAVA_HOME"; then 
    java="$JAVA_HOME/bin/java" 
fi 
exec "$java" $java_args -jar $MYSELF "[email protected]" 
exit 1 

는 그런 다음 uberjar 함께 연결할 :

cat stub.sh my-cli-command-uberjar.jar > my-cli-command && chmod +x my-cli-command

이제 직접 실행할 수 있습니다 또한 lein 플러그인 자동화가

./my-cli-command args...

이 프로세스 : lein-binplus

+0

[lein-bin] (https://github.com/Raynes/lein-bin)을 확인하십시오. –

1

Clojure 1.9부터는 새로운 CLI 도구가 있습니다! 설치는 this guide을 참조하십시오.이 같은 실행 스크립트를 만들 수 있습니다

#!/usr/local/bin/clojure 
(println "Hello World! from" *ns*) 
(require '[clojure.walk :as walk]) 
(walk/postwalk-demo {:woo ::yeah}) 

가 그런 다음 스크립트를 실행하고 그것을 실행합니다

$ chmod +x my_script 
$ ./my_script 
Hello World! from #object[clojure.lang.Namespace 0x1ebea008 user] 
Walked: :woo 
Walked: :user/yeah 
Walked: [:woo :user/yeah] 
Walked: {:woo :user/yeah} 

시작 시간도 개선 된 것으로 보인다. 그것은 최근 MBP에 (단지 문자열을 출력) 사소한 스크립트를 실행하기 위해 초 이상 조금 걸립니다 :이 솔루션은 당신이 다음 내-CLI-명령 "라는 이름의 박쥐 파일이나 쉘 스크립트를 만들 수

time ./hello 
Hello World! 
./hello 1.51s user 0.12s system 184% cpu 0.887 total 
관련 문제