如何在使用Leiningen制作uberjar时针对特定版本的java
我使用Lein uberjar创建了一个独立的jar。这在我运行Java1.8的笔记本电脑上运行得非常好。然而,我学院的计算机运行的是java 1.7.0_60 在我的project.clj中,我添加了如何在使用Leiningen制作uberjar时针对特定版本的java,java,clojure,jvm,leiningen,Java,Clojure,Jvm,Leiningen,我使用Lein uberjar创建了一个独立的jar。这在我运行Java1.8的笔记本电脑上运行得非常好。然而,我学院的计算机运行的是java 1.7.0_60 在我的project.clj中,我添加了:javac选项[“-target 1.7”],以便编译为java 1.7,但是这返回的错误与为java 1.8编译jar时的错误相同。错误为:不支持的主版本。次版本52 可能在我的项目中添加了:javac options[“-target 1.7”]。clj对编译的版本没有影响,我不确定,请帮助
:javac选项[“-target 1.7”]
,以便编译为java 1.7,但是这返回的错误与为java 1.8编译jar时的错误相同。错误为:不支持的主版本。次版本52
可能在我的项目中添加了
:javac options[“-target 1.7”]
。clj对编译的版本没有影响,我不确定,请帮助 看起来您使用的:javac选项有误。尝试使用Lein文档中提到的此选项::javac选项[“-target”“1.6”“-source”“1.6”“-Xlint:-options”]
Clojure当前编译为向后兼容于Java1.6的Java类,因此问题不在于Leiningenjavac
选项。我在我的一个项目中遇到了同样的问题。问题是,您正在使用的一个库是为太新的Java版本编译的。当您构建一个überjar时,Leiningen只需将依赖项jar中的类复制到其中,这样您就可以得到它们拥有的任何类文件版本
在我的例子中,为了解决这个问题,我必须在Github上分叉依赖项项目,使其构建Java 1.6兼容类,然后使我的Leningen项目依赖于分叉而不是主项目。你的project.clj是什么样子的?您是否依赖于使用Java8编译的任何库?问题在于使用的其中一个库。谢谢在我的例子中,我能够将依赖项回滚到与我的服务器的1.7
兼容的早期版本。然而,即使是较新的依赖版本在其项目.clj
中也有:javac选项[“-target”“1.6”]
,因此除了包版本的发布日期和Uberjar在运行时崩溃之外,我找不到一种简单的方法来测试兼容性。