簡體   English   中英

Java - 創建一個庫並導入可選的

[英]Java - make a library and import optional

我有一個我在Java應用程序中使用的庫 - 它對於某些功能很重要,但它是可選的。 這意味着如果JAR文件不存在,程序將繼續運行而不會出現問題。 我想開源我的程序,但我不能包含這個庫,這是編譯源代碼所必需的,因為我有許多import語句來使用API​​。 我不想維護兩個代碼集。 從開源版本中刪除物理jar文件的最佳方法是什么,但是仍然維護代碼以支持其他人仍然可以編譯的文件?

采用的典型方法是定義包裝器API(即接口)並在開源代碼中包含這些接口,然后提供配置選項,其中可以指定實現某些接口的類的類名。

您將導入API接口,而不是直接將類導入到開源代碼中。 這樣,您就是開源API而不是您不想開源的部分的實現,或者您無法開源。

有很多示例,但請看一下初學者的JDBC API(接口)和JDBC驅動程序(實現類)。

我幾乎和smallworld打了一個相同的東西。 如果需要此API,您可以使用Maven等項目構建工具來處理項目的依賴項。 如果有人使用pom從源代碼控制中檢出它們,他們可以為自己下載依賴項,而不必將它們包含在源代碼庫中。

可能有很多方法可以解決這個問題,這里有一些我能想到的:

  • 如果您只需要在第三方庫中調用幾種方法,則可以使用反射來調用這些方法。 它創建了非常冗長的代碼,但很難閱讀。

  • 如果你在第三方庫中沒有太多的API,你也可以創建一個單獨的JAR文件,只包含庫中類的非功能shell(只是具有相同名稱和方法的類型)具有相同的簽名)。 然后,您可以使用此JAR進行分發和編譯。 在運行時,如果可用的話,你可以用真正的JAR替換它。

  • 最常見的方法可能是在單獨的模塊/項目中為依賴於第三方庫的代碼創建包裝器API,並可能分發預構建的JAR。 這可能違背了您不希望維護兩個代碼集的願望,但從長遠來看可能是最好的,也不那么痛苦的解決方案。

暫無
暫無

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

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