Java 阅读POM';它和它的孩子们在一起

Java 阅读POM';它和它的孩子们在一起,java,maven-2,maven,Java,Maven 2,Maven,基于这一点,Brett Porter提到POM是可以读取的。我需要的不仅仅是阅读一个pom。我需要在多模块构建中阅读pom的整个树。从根pom开始,如果可能,它应该自动读取子pom?我需要在单独的Java代码中执行此操作,而不是与Maven本身相关。我提到您希望在没有Maven的情况下执行此操作。要做到这一点而不依赖maven,特别是maven库,如maven模型、maven项目生成器,将需要对现有代码进行大量的重新设计。您可以读取POM并从中提取数据,而无需进行完整的maven构建 中的源代码

基于这一点,Brett Porter提到POM是可以读取的。我需要的不仅仅是阅读一个pom。我需要在多模块构建中阅读pom的整个树。从根pom开始,如果可能,它应该自动读取子pom?我需要在单独的Java代码中执行此操作,而不是与Maven本身相关。

我提到您希望在没有Maven的情况下执行此操作。要做到这一点而不依赖maven,特别是maven库,如maven模型、maven项目生成器,将需要对现有代码进行大量的重新设计。您可以读取POM并从中提取数据,而无需进行完整的maven构建

中的源代码有一些有用的指针,例如

MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new InputStreamReader(in, "utf-8"));

阅读maven pom并获取模型。该模型有一个addModule和getModules()方法。您可以使用它来定位相对于当前父pom的子pom。

这可能有点作弊,但您可以通过Runtime.exec()调用父pom上的mvn help:effective pom,这将为您提供与其父级和模块组合时调用的目标pom的congolemerate pom文件。这将为您提供一个单独的pom文件,并防止您不得不自己发现模块/父级

我对maven库本身还不够熟悉,不知道如何在不启动另一个进程的情况下生成有效的pom,尽管我无法想象这是不可能的。如果我有机会看,我会这样做,并相应地编辑我的答案

[编辑]


这里有一个指向EffectivePomMojo源代码的链接,它显示了help:effectivepom是如何生成xml的。希望这有助于。。。虽然我不熟悉mojo是如何获取其MavenProject对象或具有私有作用域的MavenProject对象列表的

@khmarbaise你能告诉我阅读pom而不执行它有什么好处吗?我有一个项目,它是Make/CMake/Maven的组合,我需要阅读Java项目的依赖信息。我知道这不是最好的办法。我是第一个想改变这一点的人,但目前我别无选择。啊,对不起……所以我的问题不够准确。当然,我可以使用Maven库。我不能让Maven做这项工作…我需要模块的依赖项等。但是你的提示很好…谢谢。@mdma给定的链接断开了,你能尽快更新吗?不,我不能调用mvn帮助:有效的pom…我需要在Java代码中这样做…不需要调用exec。