我一直在尝试使用比项目其余部分更高的编译器合规性级别编译我的项目的一个特定类,但我无法弄清楚如何去做。
我正在使用Java 6编译项目(出于兼容性原因)并且只有一个类需要Java 8,并且只有在运行的Java版本为>时才会在代码中实例化(使用反射)。 = 8。
问题是Java 8中的类显然不能在Java 6中编译,所以我想问一下,如果Eclipse中有一种方法可以在项目导出到Java 8时用Java 8编译这个单独的类Runnable Jar。
总是可以选择在Java 6中编译项目(没有java 8类),导出,用Java 8手动编译该类,然后手动插入Jar文件,工作正常,但不是很方便。
例如,假设项目包含以下内容:
通用界面:
public interface CommonInterface {
public void foo();
}
Java 8类:
public class Java8Class implements CommonInterface {
@Override
public void foo() {
Arrays.asList("Some", "Java", "8", "code").forEach(System.out::println);
}
}
Java 6+类:
public class Java6PlusClass implements CommonInterface {
@Override
public void foo() {
List<String> list = Arrays.asList("Some", "Java", "6", "code");
for (String s : list) {
System.out.println(s);
}
}
}
主程序类:
public class Selector {
public static void main(String[] args) throws ReflectiveOperationException{
CommonInterface ci = getCorrectInstance();
ci.foo();
}
private static CommonInterface getCorrectInstance() throws ReflectiveOperationException {
String version = System.getProperty("java.version");
Matcher m = Pattern.compile("\\d\\.(\\d)\\..+").matcher(version);
String clazz = null;
if (m.find()) {
int jv = Integer.parseInt(m.group(1));
if (jv == 8)
clazz = "Java8Class";
else if (jv >= 6)
clazz = "Java6PlusClass";
}
if (clazz == null)
return null;
return (CommonInterface) Class.forName(clazz).newInstance();
}
}
在上面的示例中,是否可以将Eclipse配置为除了&#34; Java8Class&#34;之外的所有类。使用Java 6合规性和&#34; Java8Class&#34;进行编译。编译符合Java 8标准?
感谢。
答案 0 :(得分:1)
你不能在Eclipse中做到这一点,我不相信你想要达到的目标是一个好主意。
以下是您可以做的事情:
我不完全确定在使用Java 6 JRE执行程序的情况下,将jar文件放在类路径中是否可以使用第二个选项。如果无法启动,可能必须做一些类加载器技巧。