是否有用于阅读maven2 / 3 pom xml文件的库?

时间:2011-01-29 18:21:18

标签: java maven-2 maven-3

我想在Java代码中读取一个pom.xml。我想知道是否有一个库,所以我可以为不同的部分设置迭代器,例如dependenes,plugins等。我想避免手工构建解析器。

3 个答案:

答案 0 :(得分:34)

首先,我假设您尚未在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,或者编写自己的(如上面代码片段中的情况)
  3. 如何做到最好取决于您已经使用的DI框架,或者您是否只想嵌入Maven的默认容器。

答案 1 :(得分:24)

您可以尝试MavenXpp3Reader maven-model的一部分。示例代码:

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

答案 2 :(得分:2)

这取决于你想要达到的目标。如果您只想将其视为带有嵌入式XML文件的XML,请使用已提供的建议。

如果您希望在应用中实现某种形式的Maven功能,可以尝试使用新的aether库。我没有使用它,但它看起来很简单,可以集成,并且应该为您提供Maven功能。

顺便说一下,这个库是一个Maven 3 lib,而不是Maven 2(在你的标签中指定)。不知道这对你有多大影响