我目前通过调用lein run my-cli-command arg --option
如何在不需要包含lein run的情况下调用我的命令?这就是我之后的事:my-cli-command arg --option
我是否需要将其转换为二进制或可执行文件,如果是这样的话?
答案 0 :(得分:3)
据我所知,没有办法只运行my-cli-command arg --option
。
您可以通过创建Java归档文件将lein排除在等式之外:
lein uberjar
然后像其他任何人一样运行jar:
java -jar target/my-cli-command-standalone.jar arg --option
uberjar
将根据您在project.clj
中调用的项目来命名jar,并创建一个依赖于外部依赖关系的jar,以及一个不依赖外部依赖关系的jar( standalone
)。
然后,正如@gary指出的那样,你可以将java - jar ...
命令粘贴在.bat文件中,根据需要命名,然后直接运行bat。我的bat
- Fu非常弱,但可能有一种方法可以将参数传递给蝙蝠,并将它们传递给jar,这样你就不需要对参数进行硬编码。
答案 1 :(得分:2)
从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上运行一个简单的脚本(只是打印一个字符串)需要一点点的时间:
time ./hello
Hello World!
./hello 1.51s user 0.12s system 184% cpu 0.887 total
答案 2 :(得分:1)
你可以使用"二进制有效载荷"在shell脚本中,如https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable
中所述基本上,您可以在单个shell脚本文件中连接shell脚本和uberjar,并在脚本中执行java,将脚本指定为类路径上的jar文件 - 示例来自链接的帖子:
将您的跑步者脚本保存在stub.sh
:
#!/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 "$@"
exit 1
然后将它连接到你的uberjar:
cat stub.sh my-cli-command-uberjar.jar > my-cli-command && chmod +x my-cli-command
现在您可以直接运行它:
./my-cli-command args...
还有一个lein插件可以自动完成此过程:lein-binplus