我维护一个用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做到这一点?
答案 0 :(得分:1)
你唯一的选择是-source 1.1 -target 1.0在所有其他情况下,它们必须是相同的
您需要为每个版本构建一个jar,并将另一个版本组合起来。
答案 1 :(得分:1)
您必须制作3个不同的罐子,每个版本对应一个版本,其中较高版本包含更多代码示例。 (好的一面,你只需要多次重新编译java 6和7代码)
每个jar的分别将-target
代码设置为6,7或8。您也可以选择使用-source
参数并将其设置为相同的值,但除非您担心意外添加了以后的语言功能,否则我认为您不需要这样做。