Ответ 1
Вы можете попробовать MavenXpp3Reader, который является частью maven-model. Пример кода:
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileReader(mypom));
Я хотел бы прочитать pom.xml в Java-коде. Интересно, есть ли для этого библиотека, поэтому я могу иметь итератор для разных разделов, например, зависимостей, плагинов и т.д. Я хочу избежать создания парсера вручную.
Вы можете попробовать MavenXpp3Reader, который является частью maven-model. Пример кода:
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileReader(mypom));
Во-первых, я предполагаю, что вы еще не работаете внутри плагина 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
с его частными полямиКак лучше всего это сделать, зависит от среды DI, которую вы уже используете, или хотите ли вы просто внедрить контейнер по умолчанию Maven.
Это зависит от того, чего вы пытаетесь достичь. Если вы просто хотите рассматривать его как XML со встроенными XML файлами, пойдите с уже предлагаемыми предложениями.
Если вы хотите реализовать какую-либо форму функциональности Maven в своем приложении, вы можете попробовать новую библиотеку aether. Я не использовал его, но он выглядит достаточно простым для интеграции и должен предлагать функциональность Maven с минимальными усилиями с вашей стороны.
Кстати, эта библиотека представляет собой Maven 3 lib, а не Maven 2 (как указано в вашем теге). Не знаю, имеет ли это значение для вас.