Java 如何在maven3中获得MavenProject

Java 如何在maven3中获得MavenProject,java,maven-3,Java,Maven 3,我想用Java自动化部分构建系统。为此,我需要计算给定文件树中存在的源的依赖关系树 因此,我想爬过一组目录,找到存在于其中的pom.xml文件。那很好。然后我想将这些文件解析为MavenProject的实例,以便调用getParent()和getDependencies()等等 因此,问题是:如何使用maven3库获得一个完全填充的MavenProject?如果有必要,我可以接受包含第三方库,但我更喜欢由maven本地人组成的解决方案 我已经读过了,但是那里的答案对我不起作用(没有正确填充Mav

我想用Java自动化部分构建系统。为此,我需要计算给定文件树中存在的源的依赖关系树

因此,我想爬过一组目录,找到存在于其中的
pom.xml
文件。那很好。然后我想将这些文件解析为
MavenProject
的实例,以便调用
getParent()
getDependencies()
等等

因此,问题是:如何使用maven3库获得一个完全填充的
MavenProject
?如果有必要,我可以接受包含第三方库,但我更喜欢由maven本地人组成的解决方案

我已经读过了,但是那里的答案对我不起作用(没有正确填充
MavenProject

我的代码是用Java编写的,所以我希望有这样一个方法的内容:

private MavenProject makeProjectFromPom(File pomXML) {
    // Here is what I don't know.
}
    String basePath = "somepath";
    MavenEmbedder embedder = new MavenEmbedder();
    File basedir = new File(basePath);
    final List<File> allDirsWithPomXML = new ArrayList<>();
    // the next line crawls through the directory and collects references to pom.xml paths.
    gatherPomXMLPaths(basedir, allDirsWithPomXML);
    embedder.setClassLoader(this.getClass().getClassLoader());
    embedder.start();
    List<MavenProject> collectedProjects = new ArrayList<>();
    for (File nextDir : allDirsWithPomXML) {
        collectedProjects.addAll(embedder.collectProjects(nextDir, new String[]{"pom.xml"}, new String[0]));
    }
这样我就可以在我的程序中执行类似的操作:

public List<MavenProject> getAllMavenProjectsWithParent(File rootDir, MavenProject parent) {
   List<File> allPoms = findAllPoms(rootDir);
   List<MavenProject> result = new ArrayList<>();
   for(File nextPom : allPoms) {
       MavenProject next = makeProjectFromPom(nextPom);
       if(next.hasParent() && next.getParent().equals(parent))
           result.add(next);
   }
   return result;
}
公共列表getAllMavenProjectsWithParent(文件根目录,MavenProjectParent){
列出allPoms=findAllPoms(rootDir);
列表结果=新建ArrayList();
对于(文件nextPom:allPoms){
MavenProject next=makeProjectFromPom(nextPom);
if(next.hasParent()&&next.getParent().equals(parent))
结果。添加(下一步);
}
返回结果;
}
这只是一个例子,但目前对我来说并不适用

在Maven2中,我可以这样做:

private MavenProject makeProjectFromPom(File pomXML) {
    // Here is what I don't know.
}
    String basePath = "somepath";
    MavenEmbedder embedder = new MavenEmbedder();
    File basedir = new File(basePath);
    final List<File> allDirsWithPomXML = new ArrayList<>();
    // the next line crawls through the directory and collects references to pom.xml paths.
    gatherPomXMLPaths(basedir, allDirsWithPomXML);
    embedder.setClassLoader(this.getClass().getClassLoader());
    embedder.start();
    List<MavenProject> collectedProjects = new ArrayList<>();
    for (File nextDir : allDirsWithPomXML) {
        collectedProjects.addAll(embedder.collectProjects(nextDir, new String[]{"pom.xml"}, new String[0]));
    }
String basePath=“somepath”;
MavenEmbedder embedder=新的MavenEmbedder();
File basedir=新文件(basePath);
最终列表allDirsWithPomXML=new ArrayList();
//下一行遍历目录并收集对pom.xml路径的引用。
GatherPomXmlPath(basedir、allDirsWithPomXML);
setClassLoader(this.getClass().getClassLoader());
embedder.start();
List collectedProjects=new ArrayList();
for(文件nextDir:allDirsWithPomXML){
collectedProjects.addAll(embedder.collectProjects(nextDir,新字符串[]{“pom.xml”},新字符串[0]);
}

collectedProjects
中的
MavenProject
引用现在将包含诸如父项、依赖项等信息。

这就是您要寻找的吗?命令
mvn-dependency:tree
有用吗?@Stewart否。我不想为API应该提供的内容解析文本输出。我的意思是,我可以复制MavenCli的内容,或者使用反射,自己构建MavenCli在其私有方法中隐藏的状态,但我宁愿不这样做。我的意思是将它用作构建自己插件的模型。这没那么难。@Stewart是的,我知道,但我不想。在Mvn2中,该函数是内置的,我可以用3行代码完成。我希望Mvn3中也有这样的功能。