下多个JDK开发最佳实践(Best practice for developing under mu

2019-10-18 07:10发布

我有我目前到JDK 6,我喜欢利用Java 8的功能,像lambda表达式目标兼容性开发库。 该代码和API将极大地从Java 8中获利。

我想提供的库版本的Java 6和Java 8,例如,在某一部分只提供了Java版本8。

现在有可能有自己不同的源版本(遗留的Java 6版和新的Java版本8)一些核心类。

什么是这样做的最佳做法? 在Objective-C或C ++我会考虑使用预处理指令。

Answer 1:

我看到一对夫妇的选择:

  1. 包装不同版本的库,一个是JDK6,一个用于JDK8的。 用户负责,包括右一为他们的应用程序。 这将是一个有趣的构建做。 如果你使用Maven的,我想你会只使用3个项目; 一个“公地”项目与所有普通类,具有公共项目作为一个依赖,并建立了JDK6罐子,然后在出现公共项目作为一个依赖,并构建JDK8罐子“JDK8”项目“JDK6”项目。 这种方法的一个有吸引力的一点是,它显然作品,你有没有维护困难的事情。
  2. 套餐无论是JDK6和JDK8版本在同一个JAR,并创建一个“运行”型类是负责在依赖于它在运行JDK运行时创建库的对象的正确版本,例如:

     public abstract class Runtime { private static Runtime instance; public static Runtime getInstance() { if(instance == null) { try { if(System.getProperty("java.version").startsWith("8")) instance = Class.forName("com.yourcompany.libname.runtime.Runtime8").newInstance(); else instance = Class.forName("com.yourcompany.libname.runtime.Runtime6").newInstance(); } catch(Exception e) { throw new RuntimeException("Could not create runtime", e); } } return instance; } public abstract Framework getFramework(); } 

    使用这种方法,你只需要使用反射来加载初始的“运行”对象,然后你可以使用本地Java的一切。 例如:

      Framework framework=Runtime.getInstance().getFramework(); ModelObject1 m=framework.newModelObject1(); // ... 

    要确保你的Runtime6类不通过进口指JDK8类,甚至是及物动词。 这种方法的主要缺点是跟踪那个小珍闻随着时间的推移。

我想,你在做什么有趣的是,我很好奇,想听到你的选择如何完成它。 请随时通知我们!



Answer 2:

我想你可以使用系统属性( http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html以发现其中的Java版本beind使用),然后你可以调整你的应用程序运行因此。



文章来源: Best practice for developing under multiple JDKs