有没有用于读取maven2/3 pom xml文件的库?

2022-09-01 08:11:14

我想在Java代码中阅读一个pom.xml。我想知道是否有一个库,所以我可以为不同的部分提供一个迭代器,例如,dependenes,插件等。我想避免手动构建解析器。


答案 1

你可以试试MavenXpp3Reader,它是maven-model的一部分。示例代码:

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

答案 2

首先,我假设你还没有在Maven插件中运行,因为有更简单的方法可以通过那里的可用API来实现这一点。

之前发布的解决方案将允许您轻松读取POM,但是没有考虑父级的继承和表达式的插值。MavenXpp3Reader

为此,您需要使用模型构建器类。

使用这个非常简单,例如来自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的默认容器。


推荐