【问题标题】:Use new libraries in java with old JDK在 Java 中使用旧 JDK 中的新库
【发布时间】:2015-12-15 17:55:29
【问题描述】:

我的计算机中有 java 8,我使用 java 8 中的所有新库,但我在 JDk5 上编译它,因为我的客户有一个旧版本的 java,他不想更改它。

我想问一下 - 如何包含我在 java 8 中使用的库,以便我的程序在客户端的计算机上运行?

【问题讨论】:

  • 如果客户端运行java 5那么你不能执行java 8。如果客户端想要使用最新的java,他必须升级。如果没有,则必须使用 java 5。
  • 我不执行 java 8,我用JDK5编译,我只想要java 8的
  • Java 5 无法编译 java 8。
  • 如果你的意思是 java 5 不能编译 JRE5 的库 - 那不是真的。我尝试使用 stream(peek,map) 它的作品。我就是不能使用 lambda 表达式

标签: java java-8 jdk1.5


【解决方案1】:

Java 8 的库自身依赖于 Java 8 中内置的新语言特性。例如,它们在接口本身上使用 lambda 和默认方法和静态方法。

这意味着您不能只在 Java 5 运行时中运行 Java 8 的库。 Java 8 本身内置的库严重依赖于 Java 8 运行时。

你不能这样做。

【讨论】:

  • 我想我明白了。我尝试使用 java 5 运行我得到了这个结果 - Exception in thread "main" java.lang.NoClassDefFoundError: java/util/function/Co nsumer at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:242) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa der.java:56) 我认为这是原因
  • 这只是告诉你图书馆不存在。
【解决方案2】:

最接近的方法是使用 JDK 1.8 生成源代码兼容性为 1.5 的类。
但是,这将不允许您使用高于 Java 1.5 的源文件,并且现有的结构(例如 lambda 表达式)将无法编译。
对于这种方法,您需要执行以下操作:

  1. “编译器” 选项设置为非默认值并指定“生成 .class 文件兼容性”到 1.5。
  2. 设置 "来源 兼容性” 到 1.5。

我希望这就是你的意思。

【讨论】:

  • 你为什么这么说?如果我只是更改编译器但不更改“源兼容性”,它仍然可以使用 java 5 编译,并且 可以 使用高于 java 5 的文件,如果它不能完成 - 为什么它可以编译?
  • 编译器设置可以保持为 1.8,但为 java 1.5 生成类文件。
  • 我不明白你的评论。所以我可以只更改编译器而不更改源代码吗?
  • @shmil,看图
  • 这个花哨的设置有什么意义?将编译器合规级别设置为1.x 是同时设置.class 文件兼容性和源代码兼容性为1.x 的简写。因此,手动将两者都设置为1.5 与将编译器合规性设置为1.5 并保持选中“默认合规性”框相同。在您的屏幕截图中,基本设置为 1.8 的事实根本没有影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2019-01-11
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多