【问题标题】:How to target a specific version of java when making an uberjar using Leiningen使用 Leiningen 制作 uberjar 时如何定位特定版本的 java
【发布时间】:2015-10-05 18:58:30
【问题描述】:

我使用 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

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

【问题讨论】:

  • 您的 project.clj 是什么样的?您是否依赖于任何可能使用 Java 8 编译的库?
  • 问题在于使用的库之一。谢谢!

标签: java clojure jvm leiningen


【解决方案1】:

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

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

【讨论】:

  • 就我而言,我能够将依赖项回滚到与我的服务器的1.7 兼容的先前版本。然而,即使是较新的依赖版本在其project.clj 中也有:javac-options ["-target" "1.6"],所以除了软件包版本的发布日期和您的 uberjar 在运行时崩溃之外,我找不到一种简单的方法来测试兼容性。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2022-07-28
    • 2010-10-23
    • 1970-01-01
    • 2013-11-29
    • 2011-01-26
    • 2015-01-09
    • 2023-03-18
    相关资源
    最近更新 更多