6

私は大規模なオープン ソース ライブラリを使用しており、いくつかのクラスの個人用サブクラスを生成する必要があります。最善の戦略は何ですか? 元のライブラリを変更せずに維持し、更新時に簡単に再構成できるようにしたいと考えています。私のコードがプロジェクトに貢献する価値があるとは考えにくいです (ただし、これを可能にする方法で書くことは喜んで行います)。

問題は一般的なものですが、私の例で説明します。への書き込みルーチンを持つApache PDFBoxを使用していjava.awt.Graphics2Dます。これを Graphics2D ( ) のサブクラスを提供するApache Batikツールキットに置き換えた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を使用しているので、元のクラスを除外する方法があるかもしれません。

4

2 に答える 2

1

ライブラリが簡単なサブクラス フックを提供していない場合、選択の余地はあまりありません。彼らが git ミラーを持っている場合、私はそれをフォークします (ミラーを安全な場所に保管し、できれば通常の SCM の近くにバックアップします)。私の通常の戦略は、バージョン番号 (Maven 内) に -companyName を追加して、パッチが適用されたバージョンであることを思い出せるようにすることです。変更履歴に反映されるため、どのような編集を行ったかを簡単に確認できます。

クラスを変更/置換するためにmaven shadeプラグインを使用して調査することもできますが、それは少しハックな私見です。

于 2012-04-25T09:27:48.473 に答える
1

これを行う方法は次のとおりです。

  • ソース コードの変更を含む別のプロジェクトを作成します。ソースコード/リビジョン管理 (SVN、Git、使用しているものは何でも) にチェックインします。このプロジェクトには変更のみが含まれます。
  • Maven プロジェクトであることを確認してください。元のオープン ソース プロジェクトと同じバージョン番号を使用しますが、バージョンに付録を追加します。バージョン1.2を使用している場合は、プロジェクトを作成してバージョン1.2-Peter-1または類似のものを作成します。このようにして、どのバージョンに基づいているかを常に知ることができ、変更の複数のバージョン/リビジョンを提供することもできます。また、公式バージョンと競合することもありません。公式のものと同じグループ/アーティファクト ID を使用します。
  • 元のプロジェクトを独自の依存関係として使用します。

展開には、次の 2 つのオプションがあります。

于 2012-04-25T09:32:54.733 に答える