如何指定JVM标志,使它们仅应用于project.clj
文件中的一个别名?
具体来说,我想在Clojure 1.8.0中尝试built in server功能。
我可以用uberjar和命令来做到这一点:
java -Dclojure.server.interactive="{:port 8411 :accept srv.action/process}" -jar target\uberjar\srv-0.1.0-SNAPSHOT-standalone.jar
但是我希望我可以在lein别名中设置-D...
。
我试过这个
:aliases {
"serve" [:jvm-opts ["-Dclojure.server.interactive={:port 8411 :accept srv.action/process}"] "run"]
}
但是我得到了
java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to java.lang.String
有可能这样做吗? 我在Java 1.8.0_92 Java HotSpot(TM)64位服务器VM上使用“Leiningen 2.6.1”
答案 0 :(得分:3)
Leiningen profiles绝对是这样做的方法。在您的案例:jvm-opts
中,您可以使用任何常用选项定义配置文件。在您的profile.clj中包含类似于以下内容的内容:
:profiles {:clj-server {:jvm-opts ["-Dclojure.server.interactive={:port 8411 :accept srv.action/process}"]}}
然后,您可以通过with-profile告诉leiningen您希望使用此个人资料。
lein with-profile clj-server run
但是,这只会使用新配置文件中指定的选项。如果您希望除了默认配置文件(开发,测试等)之外还要激活新配置文件,则需要在配置文件前添加+
。
lein with-profile +clj-server run
如果你像我一样懒惰,你可以使用这个新定义的配置文件定义一个别名来运行不同的任务:
:aliases {"clj-server-run" ["with-profile" "+clj-server" "run"]}
然后就像调用lein clj-server-run
一样简单。
希望这会有所帮助。我真的建议阅读所提供的leiningen文档以及它非常有用。
答案 1 :(得分:2)
我使用个人资料找到答案:
:profiles {:uberjar {:aot :all}
:server {:jvm-opts ["-Dclojure.server.interactive={:port 8411 :accept srv.action/process}"]}}
:aliases {
"serve" [ "with-profile" "server" "run"]})
我添加了一台服务器'配置文件,允许指定自己的:jvm-opts
,然后使用别名来运行该配置文件。它可以与lein serve
一起运行。
欢迎任何评论。