Я использую большую библиотеку с открытым исходным кодом, и мне нужно создать личные подклассы нескольких классов. Каковы лучшие стратегии? Я хотел бы сохранить исходную библиотеку неизменной и иметь возможность легко переконфигурировать ее при обновлении. Маловероятно, что мой код стоит участия в проекте (, хотя я с удовольствием напишу так, чтобы это было возможно ).
Проблема общая, но я проиллюстрирую ее своим примером. Я использую 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, поэтому, возможно, есть способ исключить исходные классы.