我想用Java自动化部分构建系统。为此,我需要计算给定文件树中存在的源的依赖关系树。
所以,我想抓取一组目录并找到那里存在的pom.xml
个文件。这很好。然后我想将这些文件解析为MavenProject
的实例,以便我可以调用getParent()
和getDependencies()
等等。
所以,问题是:如何使用maven3库获得完全填充的MavenProject
?如果有必要,我可以包含第三方库,但更喜欢由maven natives组成的解决方案。
我已阅读Get MavenProject from just the POM.xml - pom parser?,但那里的答案对我不起作用(MavenProject
未正确填充)
我的代码是用Java编写的,所以我希望得到像这样的方法的内容:
private MavenProject makeProjectFromPom(File pomXML) {
// Here is what I don't know.
}
所以我可以在我的程序中做这样的事情:
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;
}
这只是一个例子,但对我来说暂时不起作用。
在Maven2中,我可以这样做:
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]));
}
MavenProject
中的collectedProjects
引用现在将包含父,依赖等信息。