【发布时间】:2011-06-17 20:07:02
【问题描述】:
我想阅读 Java 代码中的 pom.xml。我想知道是否有一个库,所以我可以为不同的部分创建一个迭代器,例如依赖项、插件等。我想避免手动构建解析器。
【问题讨论】:
我想阅读 Java 代码中的 pom.xml。我想知道是否有一个库,所以我可以为不同的部分创建一个迭代器,例如依赖项、插件等。我想避免手动构建解析器。
【问题讨论】:
您可以尝试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 库,而不是 Maven 2(在您的标签中指定)。不知道这对你有没有影响
【讨论】: