【问题标题】:Use leiningen aliases to specify JVM flags使用 leiningen 别名来指定 JVM 标志
【发布时间】:2016-06-27 13:16:06
【问题描述】:

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

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    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 文档,并且它非常有用。

    【讨论】:

    • 这几乎就是我最终要做的。在配置文件名称中使用“+”是一个有用的提示。
    【解决方案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 运行。

    欢迎任何 cmets。

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2016-09-04
      相关资源
      最近更新 更多