我有一個庫用於Java應用程序 - 這對某些功能很重要,但它是可選的。這意味着如果JAR文件不存在,程序將繼續運行。我想開源我的程序,但我不能包含這個庫,這是編譯源代碼所必需的,因爲我有大量的導入語句來使用API。我不想維護兩個代碼集。從開放源碼版本中刪除物理jar文件的最佳方法是什麼,但仍然維護代碼以支持其他人仍然可以編譯它的代碼?Java - 創建庫並導入可選
4
A
回答
3
所採用的典型方法是定義包裝器API(即接口)並在開源代碼中包含這些接口,然後提供配置選項,其中可以指定實現某些接口的類的類名稱。
您將導入API接口,而不是將類直接導入到您的開源代碼中。這樣,您就可以開源API,但不會實現您不想開源的部分,或者無法開源。
有很多例子,但是看看JDBC API(接口)和JDBC驅動程序(實現類)的初學者。
3
我非常喜歡用smallworld輸入同樣的東西,只有一個補充。如果這個API是必要的,你可以使用像Maven這樣的項目構建工具來處理項目的依賴關係。如果有人使用pom從源代碼管理中檢查出來,他們可以自行下載依賴關係,而不必將它們包含在源代碼庫中。
3
很可能有多種方式來解決這個問題,這裏有一對夫婦,我能想到的:
如果你只有一對夫婦需要在第三方庫調用方法,你可以使用反思來調用這些方法。它創建了非常冗長的代碼,雖然很難閱讀。
如果你沒有太多使用第三方庫的API,你也可以創建一個單獨的JAR文件,其中包含類的只是一個非功能性的殼庫(只是類型具有相同簽名的相同名稱和方法)。然後您可以使用此JAR進行分發和編譯。在運行時,如果可用的話,你會用真正的JAR替換它。
最常見的方法可能是在獨立的模塊/項目中爲依賴於第三方庫的代碼創建一個包裝API,並可能分發預構建的JAR。這可能違背了你不想維護兩套代碼集的願望,但從長遠來看,這可能證明是最好的,也是較不痛苦的解決方案。
相關問題
- 1. 在Eclipse中創建和導入Java庫
- 2. pg_dump創建並導入pgsql數據庫
- 3. 如何將Java項目導入Firebase並創建數據庫?
- 4. 導入庫創建,C++/VisualStudio2013
- 5. 從Java高效地創建大量數據並將其導入SQLite數據庫
- 6. java類導入到jsp並創建對象問題
- 7. 導入(合併) - 導出java數據庫數據庫
- 8. 從xml創建模型並導入數據庫
- 9. 創建並從Java填補數據庫
- 10. node.js是否可以導入java庫
- 11. 如何導入我創建的java類
- 12. 導入Firebase並創建推送ID
- 13. 導入XML並創建目錄C#
- 14. 動態導入並創建類實例
- 15. 創建mysql數據庫和導入XML
- 16. 導入庫創建不工作
- 17. VS 2010:LNK1104 - 不能創建導入庫
- 18. 用Javascript導入庫創建工具類
- 19. 創建oneliner導入數據庫
- 20. MATLAB:導入Java庫
- 21. 導入Java庫groovy
- 22. 導入java com.google。*庫
- 23. 導入庫的Java
- 24. 用Java導入庫
- 25. 創建可在Groovy中導入和使用的庫
- 26. 在Linux上爲可執行文件創建導入庫
- 27. 動態創建複選框並插入到數據庫中
- 28. 創建下拉菜單並將選擇插入數據庫
- 29. 選擇,計算,創建並插入
- 30. 創建並在Java
我發現這個例子有助於實現接口。 http://www.janeve.me/articles/dynamic-loading-using-java-reflection-and-properties – JeffG