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