java如何获得pom文件的完全解析模型?
如何获得pom文件的完全解析模型
这基本上是对How can i programmaticaly build the effective model of a pom file?的重新表述
我正在构建一个maven插件,它对一组模块执行一些验证规则。 这些模块的pom文件是可用的,但当插件被执行时,它们不是反应器的一部分
我可以使用此方法读取pom文件并获得相应的模型对象(为了简单起见,删除了异常处理):
private Model pomToModel(String pathToPom) throws Exception {
BufferedReader in = new BufferedReader(new FileReader(pathToPom));
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(in);
return model;
}
它可以工作,但是模型对象只有pom文件所具有的相同信息
如何改进该方法以获得“完全解析”的模型对象? 通过完全解析,我的意思是:具有所有可传递的依赖项以及来自父POM的所有其他内容
干杯
# 1 楼答案
maven帮助插件在执行“mvn帮助:有效pom”时也会执行类似的操作
有关来源,请参见http://svn.apache.org/viewvc/maven/plugins/tags/maven-help-plugin-2.1.1/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java?view=markup
我认为这不会显示传递依赖
mvn dependency:tree的目标是:http://svn.apache.org/viewvc/maven/plugins/tags/maven-dependency-plugin-2.4/src/main/java/org/apache/maven/plugin/dependency/TreeMojo.java?view=markup
也许你可以把两者结合起来
# 2 楼答案
我做到了:-)
帮助:有效的pom和依赖性:tree确实没有帮助
我必须看看maven是如何为注入mojo的MavenProject构建模型的。 帮助:有效的pom已经收到已解析的模型,dependency:tree只构建DependencyGraph,但它不会将pom的整个模型加载到内存中
通过使用下面的代码,我能够获得一个模型对象,其中包含来自父对象的所有信息、解析的${property}表达式和扩展的可传递依赖项
以下是方法:
1)获取模型解析程序
您将需要一个接口组织的实例。阿帕奇。专家模型决议ModelResolver。 不幸的是,maven不容易通过依赖注入提供一个(至少我找不到),所以我们必须构建一个。 为了让事情变得更好,该接口仅有的两个实现是包保护的,因此您需要使用一些反射魔法来实例化它。 实现它的具体类是DefaultModelResolver和ProjectModelResolver。 我能够像这样构建一个DefaultModelResolver
2)构建模型
当您拥有modelResolver时,您可以从pom文件构建模型,如下所示:
看起来不漂亮,但对我来说很有效P
# 3 楼答案
为了以防万一,下面是一个在Groovy中运行的示例。它使用葡萄动态加载消耗pom所需的密度。xml。它同时加载运行时类路径和测试类路径
# 4 楼答案
也许对你来说太晚了,但如果它能在将来帮助别人。 所以我就这样做了:
就这样。它应该会起作用。如果您有一些特殊的包装(例如捆绑…)在目标pom项目中,确保与这些包关联的插件安装在当前项目中
# 5 楼答案
Romain提供了一个很好的答案above,但它使用了一个从maven 3中删除的弃用类。x更新版本如下:
一个有效的例子是hierarchy-maven-plugin
# 6 楼答案
您寻找的源代码位于
help:effective-pom
的某个地方---编辑更新--
在a quick glance之后,似乎需要从读取的pom构建一个Maven
Project
。这可能涉及许多步骤,包括解析POM的父项目、下载和解析其他Maven插件工件以及将所有引用连接在一起单独阅读儿童级pom是不行的