我想在Java代码中读取一个pom.xml。我想知道是否有一个库,所以我可以为不同的部分设置迭代器,例如dependenes,plugins等。我想避免手工构建解析器。
答案 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 )
{
...
}
你必须做两件事来运行它:
ModelBuilder
的实例,包括其私有字段如何做到最好取决于您已经使用的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(在你的标签中指定)。不知道这对你有多大影响