【问题标题】:Is there a library for reading maven2/3 pom xml files?是否有用于读取 maven2/3 pom xml 文件的库?
【发布时间】:2011-06-17 20:07:02
【问题描述】:

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

【问题讨论】:

    标签: java maven-2 maven-3


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    首先,我假设您还没有在 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,或编写自己的解析器(如上述 sn-p 中的情况)

    如何最好地做到这一点取决于您已经在使用的 DI 框架,或者您是否只想嵌入 Maven 的默认容器。

    【讨论】:

    • 据我了解,这是 Maven 3 的做法。 Maven 2.2.x 方法是什么,你能告诉我们吗?提前致谢。
    • 这些库是兼容的,所以我建议无论如何都使用 maven 3 库进行嵌入。如果你真的需要使用 Maven 2 库,你可以在这里找到一个例子:github.com/brettporter/centrepoint/blob/master/centrepoint/…
    • 感谢您的澄清!非常感谢!
    • @BrettPorter 我没有在 Maven 插件中运行,并且我在使用 RepositoryModelResolver 时遇到了问题。我怎样才能使它在 Maven 插件之外工作?
    • 您在使用解析器时遇到了哪些问题?我本来希望构建器很难实例化。 (随时发布一个新问题并指出它......)
    【解决方案3】:

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

    如果您希望在您的应用中实现某种形式的 Maven 功能,您可以尝试新的 aether 库。我没有使用过它,但它看起来很容易集成,并且应该提供 Maven 功能而您无需付出任何努力。

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

    【讨论】:

    • 哇,僵尸话题。无论如何,正如我所说,这取决于你想要做什么。如果只是将配置从外部解析到 Maven,我会使用普通的 XML 解析器。如果您正在编写插件,我想您可以,但可能有更新的库可用(我已经离开 Maven 开发一段时间了)。您可以查看一些插件文档 - maven.apache.org/plugin-developers PS。我注意到以太的链接不再有效新链接是 - eclipse.org/aether
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多