根据post提到(Brett Porter)可以读取POM。我需要的是不仅要读一个pom。我需要在多模块构建中读取整个pom树。从根pom开始,它应该自动读取子pom,如果可能的话?我需要在与Maven本身无关的单独Java代码中执行此操作。
答案 0 :(得分:2)
我提到你想要在没有maven的情况下这样做。试图在不依赖maven的情况下做到这一点,特别是像maven-model,maven-project-builder这样的maven库,将涉及对现有代码的大量改造。您可以在不执行完整maven构建的情况下读取POM并从中提取数据。
来自Artifactory的源代码有一些有用的指针,例如使用
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new InputStreamReader(in, "utf-8"));
阅读maven pom并获取模型。 Model有一个方法addModule和getModules()。您可以使用它来查找相对于当前父pom的子poms。
答案 1 :(得分:1)
也许这是作弊的一点点,但也许你可以通过Runtime.exec(http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29)在父pom上调用mvn help:effective-pom
,这将为你提供目标pom的conolemerate pom文件与父母和模块结合使用时调用它。这将为您提供一个单独的pom文件,并防止您必须自己发现模块/父母。
我对maven库本身并不熟悉,知道如何在不启动maven的情况下本地生成有效的pom,尽管我无法想象不可能。如果我有机会看,我会这样做并相应地编辑我的答案。
[编辑]
这是一个指向EffectivePomMojo源代码的链接,该源代码显示了help:effective-pom如何生成xml: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。希望有所帮助......虽然我不熟悉mojo如何获取其MavenProject对象或具有私有范围的MavenProject对象列表。