Подтвердить что ты не робот

Есть ли библиотека для чтения файлов maven2/3 pom xml?

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

4b9b3361

Ответ 1

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

MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileReader(mypom));

Ответ 2

Во-первых, я предполагаю, что вы еще не работаете внутри плагина 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 )
{
     ...
}

Для этого нужно сделать две вещи:

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

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

Ответ 3

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

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

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