Я хотел бы прочитать pom.xml в Java-коде. Интересно, есть ли для этого библиотека, поэтому я могу иметь итератор для разных разделов, например, зависимостей, плагинов и т.д. Я хочу избежать создания парсера вручную.
Есть ли библиотека для чтения файлов maven2/3 pom xml?
Ответ 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 (как указано в вашем теге). Не знаю, имеет ли это значение для вас.