簡體   English   中英

在多個JDK下進行開發的最佳實踐

[英]Best practice for developing under multiple JDKs

我有一個正在開發的庫,該庫具有與JDK 6的目標兼容性。我喜歡利用Java 8功能,例如lambda。 這些代碼和API將極大地受益於Java 8。

我想提供Java 6和Java 8庫的版本,例如,某些部分僅在Java 8版本中可用。

現在,有幾個核心類可能具有不同的源版本(舊版Java 6版本和新版Java 8版本)。

最佳做法是什么? 在Objective-C或C ++中,我將考慮使用預處理程序指令。

我看到幾個選擇:

  1. 打包庫的不同版本,一個用於JDK6,一個用於JDK8。 用戶有責任為其應用程序添加合適的應用程序。 這將是一個有趣的構建。 如果您使用的是Maven,我想您將只使用3個項目。 一個具有所有公共類的“ commons”項目,一個以commons項目為依賴項並構建JDK6 jar的“ JDK6”項目,然后一個以commons項目為依賴項並構建JDK8 jars的“ JDK8”項目。 這種方法的一個吸引人的地方是它顯然有效,並且您無需進行任何維護。
  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您的Runtime6類不會引用JDK8類,即使通過導入來傳遞也是如此。 這種方法的主要缺點是隨着時間的流逝跟蹤很少的花絮。

我認為您正在做的事情很有趣,並且我很好奇您選擇如何完成它。 請隨時通知我們!

我認為您可以使用系統屬性( http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html )來發現使用了哪個Java版本,然后可以使應用程序適應運行因此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM