我可以 运行 我的命令没有 lein 运行 吗?

Can I run my command with out lein run?

我目前 运行 我通过调用编写了一个简单的 cli:lein run my-cli-command arg --option

如何在不需要包含 lein 运行 的情况下调用我的命令?这就是我想要的:my-cli-command arg --option

我需要将其转换为二进制文件或可执行文件吗?如果需要,如何转换?

据我所知,没有办法 运行 只是 my-cli-command arg --option

您可以通过创建 Java 存档来排除 lein 的影响:

lein uberjar

然后 运行 罐子,就像其他罐子一样:

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

uberjar 将根据您在 project.clj 中对项目的命名来命名 jar,并将创建一个依赖外部依赖项的 jar,以及一个不依赖外部依赖项的 jar(standalone).

然后,正如@gary 指出的那样,您可以将 java - jar ... 命令粘贴到 .bat 文件中,随意命名,然后直接 运行 bat。我的 bat-Fu 很弱,但可能有一种方法可以将参数传递给 bat 并将它们传递给 jar,这样您就不需要对参数进行硬编码。

我没用过,但我知道 inlein 存在,它看起来像你需要的。

Inlein is the easiest and fastest way to run Clojure scripts. You only have to inline your dependencies, add in a shebang line, and make the script file executable.

还有一个最小的例子:

#!/usr/bin/env inlein

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

(println "hello world!")

您可以在 shell 脚本中使用 "binary payload",如 https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable

中所述

基本上,您可以将 shell 脚本和您的 uberjar 连接在一个 shell 脚本文件中,然后在脚本中执行 java 指定该脚本作为类路径上的 jar 文件 -该示例来自链接 post:

将您的 运行ner 脚本保存在 stub.sh:

#!/bin/sh
MYSELF=`which "[=10=]" 2>/dev/null`
[ $? -gt 0 -a -f "[=10=]" ] && MYSELF="./[=10=]"
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

从 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