使用leiningen别名指定JVM标志

时间:2016-06-27 13:16:06

标签: clojure leiningen

如何指定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”

2 个答案:

答案 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一起运行。

欢迎任何评论。