使用Leiningen制作uberjar时如何定位特定版本的java

Wil*_*ley 9 java jvm clojure leiningen

我使用Lein uberjar创建了一个独立的jar.这在运行java 1.8的笔记本电脑上运行得非常好.然而,我大学的计算机运行java 1.7.0_60.

在我的project.clj中,我已经添加:javac-options ["-target 1.7"]了以便编译到java 1.7,但是这会返回与为Java 1.8编译该jar时相同的错误.错误是:Unsupported major.minor version 52.

也许添加:javac-options ["-target 1.7"]到我的project.clj对编译的版本没有影响,我不确定,请帮忙!

Jam*_*ott 5

Clojure 当前编译为向后兼容 Java 1.6 的 Java 类,因此问题不是 Leiningenjavac选项。我在我的一个项目中遇到了同样的问题。问题是您正在使用的库之一是为太新的 Java 版本编译的。当您构建 überjar 时,Leiningen 只是将依赖项 jar 中的类复制到其中,因此您可以获得它们拥有的任何类文件版本。

在我的例子中,为了解决这个问题,我不得不在 Github 上 fork 依赖项目并使其构建与 Java 1.6 兼容的类,然后让我的 Leningen 项目依赖于 fork 而不是主项目。


Mik*_*nov 0

看来你用 :javac-options错了。尝试使用 Lein 文档中提到的此选项: :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"]