【问题标题】:Clojure: Controlling compilation options via LeiningenClojure:通过 Leiningen 控制编译选项
【发布时间】:2013-09-08 05:43:43
【问题描述】:

我可以通过 Leiningen(项目文件)控制编译器选项(优化、调试信息的生成等)吗?

是否涉及javac 或直接由 Clojure 编译器发出的 JVM 代码?我想让我的 uberjar 尽可能小而快。

另一个很接近的问题是jvm-options。我不熟悉 Java,但似乎它们在 Leiningen (通过 lein run)运行的情况下是有意义的,因为 uberjar 直接由 JVM 执行,我控制它的选项:java -client <other options> -jar uberapp_uberjar.jar

Doc 说我可以使用配置文件。在我的 Mac 上,我在 ~/.lein/ 中找不到配置文件字段。有show-profiles 命令,有显示配置文件的命令吗?

【问题讨论】:

  • Clojure 没有被编译,它被解释了。 Clojure 编译器仅在您告诉它的特定情况下生成类(通常用于 Java 互操作)。
  • 道文,这是不对的。 Clojure 代码编译成 JVM 字节码:clojure.org/compilation

标签: clojure leiningen


【解决方案1】:

您可以在 leiningen project.clj 文件中设置一系列选项,各种 java 选项都是其中的一部分。

当我需要查看可能的情况时,我总是查看 github 上的这个 project.clj 示例文件

https://github.com/technomancy/leiningen/blob/master/sample.project.clj

我相信他一直比较擅长保持更新

【讨论】:

  • 好的,谢谢!我可以添加-g:none。我也可以使用通用 JVM 方法,如 pack200 和 ProGuard。
【解决方案2】:

:javac-options 可以取任意javac option

例如:

(defproject com.example.foo/bar "0.1.0-SNAPSHOT"
:description
"Some awesome app."

:url "http://www.example.com"
:license {:name "" :url ""}
:dependencies [[org.clojure/clojure "1.5.1"]
               [org.clojure/clojure-contrib "1.2.0"]]

:aot [com.example.foo.core]
:main com.example.foo.core
:target-dir "target/"
:source-paths ["src"]
:compile-path "target/classes"
:javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options" "-g"])

【讨论】:

  • 我注意到了。我尝试了:javac-options ["-g:none"]debug:false,但我的 jar 的大小没有改变 - 我使用这些选项添加了新的配置文件 opt 并运行了命令 lein with-profile opt uberjar。感谢您在这里指出。
【解决方案3】:

道文发表的评论有误。

Clojure 代码以can be seen here 的形式即时编译成 JVM 字节码。

至于您的问题,您可以在 project.clj 文件中将 JVM 选项传递给 leiningen:

(defproject example "0.0.1"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.5.1"]
  :jvm-opts ["-javaagent:newrelic/newrelic.jar"]})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-24
    • 2011-05-03
    • 2012-07-07
    • 1970-01-01
    • 2021-07-23
    • 2011-10-31
    • 2021-01-01
    • 2017-07-12
    相关资源
    最近更新 更多