如何在Java中定位较低的语言级别

时间:2014-10-01 18:04:37

标签: java maven lambda java-8

我维护一个用Java编写的Java tutorial application,它演示了Java 6,7和8的功能。每个教程屏幕都是根据需要由Class.forName动态加载的。 Java 7类需要使用Java 7构造,Java 8类需要使用Lambdas和Date / Time API。

我希望所有这三个语言级别的用户都可以访问它,只是如果它们在Java 6上我们就不会加载Java 7或8类,如果在7上我们就不会加载Java 8个班级。

我们将动态确定运行时级别并忽略更高级别,仅通过Class.forName()加载相关类。显然,使用Java 6或7的用户将无法执行幻数为8的代码。所以我想在构建中定位早期的Java版本。

换句话说,我想将source设置为1.8并将目标设置为1.6

然而,Maven(和Javac)阻止我指定低于源的目标。

还有其他办法吗?

我过去使用Android的JavaFX代码完成了这项工作,我可以使用Lambdas构建JavaFX 8代码,然后将其部署到当前的Android版本。但在这种情况下,有一个特殊的SDK处理lambda并构建到Java 7。

有没有办法用标准Java 8做到这一点?

2 个答案:

答案 0 :(得分:1)

你唯一的选择是-source 1.1 -target 1.0在所有其他情况下,它们必须是相同的

您需要为每个版本构建一个jar,并将另一个版本组合起来。

答案 1 :(得分:1)

您必须制作3个不同的罐子,每个版本对应一个版本,其中较高版本包含更多代码示例。 (好的一面,你只需要多次重新编译java 6和7代码)

每个jar的

分别将-target代码设置为6,7或8。您也可以选择使用-source参数并将其设置为相同的值,但除非您担心意外添加了以后的语言功能,否则我认为您不需要这样做。