Есть ли библиотека для чтения XML-файлов maven2 / 3 pom? - PullRequest
26 голосов
/ 29 января 2011

Я хотел бы прочитать pom.xml в коде Java. Интересно, есть ли для этого библиотека, поэтому у меня может быть итератор для разных разделов, например, зависимостей, плагинов и т. Д. Я хочу избежать создания парсера вручную.

Ответы [ 3 ]

34 голосов
/ 03 февраля 2011

Во-первых, я предполагаю, что вы еще не работаете внутри плагина Maven, поскольку есть более простые способы добиться этого с помощью доступных API.

Выложенное ранее решение MavenXpp3Reader позволит вам легко читать POM, однако не учитывает наследование родителя и интерполяцию выражений.

Для этого вам потребуется класс ModelBuilder .

Использовать это довольно просто, например, из Archiva это фрагмент кода:

ModelBuildingRequest req = new DefaultModelBuildingRequest();
req.setProcessPlugins( false );
req.setPomFile( file );
req.setModelResolver( new RepositoryModelResolver( basedir, pathTranslator ) );
req.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );

Model model;
try
{
    model = builder.build( req ).getEffectiveModel();
}
catch ( ModelBuildingException e )
{
     ...
}

Вы должны сделать две вещи, чтобы выполнить это, хотя:

  1. создать экземпляр и связать экземпляр ModelBuilder, включая его частные поля
  2. используйте один из распознавателей Maven для поиска родительских POM или напишите свое собственное (как в приведенном выше фрагменте)

Как лучше всего это сделать, зависит от структуры DI, которую вы уже используете, или от того, хотите ли вы просто вставить контейнер Maven по умолчанию.

24 голосов
/ 29 января 2011

Вы можете попробовать MavenXpp3Reader , который является частью maven-model . Пример кода:

MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileReader(mypom));
2 голосов
/ 23 марта 2011

Это зависит от того, чего вы пытаетесь достичь.Если вы просто хотите рассматривать его как XML со встроенными XML-файлами, воспользуйтесь предложениями, которые уже были предложены.

Если вы хотите внедрить в свое приложение какую-либо функциональность Maven, вы можете попробовать новую библиотека эфира .Я не использовал его, но он выглядит достаточно простым для интеграции и должен предлагать функциональность Maven без особых усилий с вашей стороны.

Кстати, эта библиотека - библиотека Maven 3, а не Maven 2 (как указано в вашейтег).Не знаю, имеет ли это для тебя большое значение

...