2012-04-25 64 views
6

我正在使用一個大的開源庫,需要生成一些類的個人子類。什麼是最好的策略?我希望保持原始庫不變,並且在更新時能夠輕鬆地重新配置。我的代碼不太可能對項目有所貢獻(儘管我很樂意以允許這種方式寫作)。繼承開源庫

該問題是一個普遍的問題,但我會用我的例子來說明。我正在使用Apache PDFBox,它有一個例程寫入java.awt.Graphics2D。我用Apache Batik工具包替代了這個工具包,它提供了Graphics2D的一個子類(org.apache.batik.svggen.SVGGraphics2D),所以我可以捕獲SVG表示。我創建一個實例

public static org.apache.batik.svggen.SVGGraphics2D createSVG() { 
    org.w3c.dom.DOMImplementation domImpl = 
    org.apache.batik.dom.GenericDOMImplementation.getDOMImplementation(); 
     org.w3c.dom.Document document = 
      domImpl.createDocument("http://www.w3.org/2000/svg", "svg", null); 
     return new org.apache.batik.svggen.SVGGraphics2D(document); 
    } 

其中PDFBox的使用圖形的地方是org.apache.pdfbox.PDFReader我所編輯,使新的圖形:

protected void showPage(int pageNumber) 
{ 
    try 
    { 
     PageDrawer drawer = new PageDrawer(); 
     PageWrapper wrapper = new PageWrapper(this); 
     PDPage page = (PDPage)pages.get(pageNumber); 
     wrapper.displayPage(page); 
     PDRectangle cropBox = page.findCropBox(); 
     Dimension drawDimension = cropBox.createDimension(); 
     svg = PDFPagePanel.createSVG();   // MY EDIT!!!!!!!!! 
     drawer.drawPage(svg, page, drawDimension); 
     writeSVG(pageNumber); 
    } 
    catch (IOException exception) 
    { 
     exception.printStackTrace(); 
    } 
} 

我已經得到它的工作(這不是問題) 。我擔心的是,我必須破解/編輯並重新編譯一些分佈式PDFBox類,只是爲了生成和使用子類。我最終在類庫中找到類似PMRPDFReader的類。這是非常混亂的 - 我不能立即記住我編輯的地方等。

我覺得我應該可以按原樣使用該庫,並簡單地添加/鏈接我的子類。我使用maven,所以也許有一種排除原始類的方法。

回答

1

這是我會怎麼做:

  • 創建一個包含你的源代碼更改一個單獨的項目。檢查它到源代碼/修訂控制(SVN,Git,無論你使用什麼)。該項目將只包含您的更改。
  • 確保它是Maven項目。使用與原始開源項目相同的版本號,但在版本中添加附錄。如果您使用的版本是1.2,請創建您的項目以使版本1.2-Peter-1或類似的東西。通過這種方式,您始終可以知道基於哪個版本還可以提供多個版本/修訂版本。它也不會與官方版本衝突。使用與官方相同的組/工件ID。
  • 將原始項目用作自己的依賴項。

對於部署,您則有兩種選擇:

+0

+1有用的建議 – 2012-04-25 09:43:09

1

如果庫沒有提供簡單的子類鉤子,那麼你沒有太多的選擇。鑑於他們有一個git鏡像,我只需將它分叉(將鏡像保存在安全的地方並備份,最好靠近正常的SCM)。我通常的策略是將-companyName附加到版本號(在Maven中),以便我可以記住它是修補版本。你可以很容易地看到你做了什麼編輯,因爲他們將在你的修訂歷史中。

你也可以調查使用Maven樹蔭插件來改變/替換類,但這有點hackier恕我直言。

+0

感謝。他們顯然希望人們能夠繼承子類,但是我還沒有看到明確的鉤子(接口,依賴注入等)。 – 2012-04-25 09:38:08

+0

然後,他們可能非常願意接受你的補丁,如果他們只是爲了創建鉤子。 – artbristol 2012-04-25 09:39:57

+0

當我得到它整齊的工作,我一定會在他們的名單上提到 – 2012-04-25 09:41:57