Создать XML-сопоставление рекурсивного поиска в каталоге - PullRequest
5 голосов
/ 08 марта 2012

Я читаю список с большим количеством архивов под определенными компонентами.например,

component1:filelocation1/a11.ear
component1:filelocation1/a12.ear
component2:filelocation2/a2.ear
component3:filelocation3/a3.ear
component4:filelocation3/basefile.properties

Мне нужно рекурсивно разархивировать каждый архив до последнего уровня данных и сгенерировать файл сопоставления XML, содержащий правильное сопоставление компонента с последним элементом архива.Структура XML-документа, которая будет выглядеть так:

<my-app>
    <mapping>
    <toplevel loc="filelocation1" filename="a11.ear" component="component1">
        <childlevel loc="." filename="x1.war">
          <childlevel loc="WEB-INF/classes" filename="abc1.class"/>
          <childlevel loc="WEB-INF/classes" filename="abc2.class"/>
        </childlevel>
    </toplevel> 
    <toplevel loc="filelocation1" filename="a12.ear" component="component1">
      <childlevel loc="." filename="x2.jar">
      <childlevel loc="org/test" filename="abc1.class"/>
      <childlevel loc="org/test" filename="abc2.class"/>
      </childlevel>
      <childlevel loc="." filename="x3.war">
          <childlevel loc="WEB-INF/lib" filename="web1.jar">
          <childlevel loc="org/test" filename="abc1.class"/>
      </childlevel>
      <childlevel loc="WEB-INF/classes" filename="abc2.class"/>
      </childlevel>
    </toplevel> 
    </mapping>
    </my-app>

Как лучше всего это сделать?Я рассматриваю возможность использования синтаксического анализатора DOM для генерации XML.

Ответы [ 2 ]

1 голос
/ 06 апреля 2012

Поскольку JAR-файлы также являются ZIP-файлами, если вы собираетесь делать это на Java, я бы использовал библиотеку java.util.zip. Хотя вам все равно придется рекурсивно открывать любые JAR-файлы, встроенные в WAR-файлы и EAR-файлы, это избавит вас от необходимости проходить по каталогам, содержащим плоские файлы. Вы также можете использовать подкласс JarFile ZipFile, предлагаемый библиотекой java.util.zip.

http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipFile.html

Я также, вероятно, не стал бы беспокоиться о парсере DOM для простой распечатки XML. Вы бы строили (потенциально большую) структуру в памяти, когда вместо этого могли бы печатать данные в поток по ходу. Также парсеры предназначены для синтаксического анализа XML в структуре данных, а не наоборот. Стандартные классы разбора Java DOM, javax.xml.parsers.DocumentBuilderFactory и javax.xml.parsers.DocumentBuilder не поставляются с командой «печать». Стандартный способ создания отформатированного текстового вывода из объекта org.w3c.dom.Document - это использование XSL-преобразователя (см. http://java.sun.com/webservices/reference/tutorials/jaxp/html/xslt.html#gghkq), и опять же, это, вероятно, больше проблем, чем стоит. Вы хотите расширить эту программу, но если все, что у вас здесь есть, это все, что нужно сделать, я бы не стал создавать большой объект DOM.

0 голосов
/ 03 апреля 2012

Я бы сделал это, используя gradle .

Gradle имеет удобные встроенные средства для распаковки архивов. Вы можете использовать groovy (поставляется с gradle) для разбора / генерации XML, который будет намного чище, чем использование библиотеки Java XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...