我可以 运行 我的命令没有 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
我目前 运行 我通过调用编写了一个简单的 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