I am attempting to retrieve the entire dependency tree and their poms starting at the root of the project. I am starting with a POM already existing in my file system, but I'm not sure how to retrieve the dependency poms from the repository.
I am using the following code to access the dependency list. From the list I have all the information on the artifacts. I'm just not sure how to access the repository.
FileReader reader = null;
Model model = null;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
File pomfile = new File("pom.xml");
model.setPomFile(pomfile);
MavenProject project = new MavenProject(model);
List<Dependency> deps = project.getDependencies();
// Get dependency details
for (Dependency d: deps) {
System.out.print(d.getArtifactId());
System.out.print(":");
System.out.println(d.getVersion());
}
Actually you were pretty close to reading the dependencies. All that was missing was:
Model model = mavenreader.read(new FileReader(pomFile));
Full example:
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
File pomfile = new File("pom.xml");
Model model = mavenreader.read(new FileReader(pomFile));
List<Dependency> deps = model.getDependencies();
for (Dependency d: deps) {
System.out.print(d.getArtifactId());
}
This doesn't get you a dependency tree but you can repeat it for the dependencies you find.
Unfotunately that is not that trivial :-) I can give you some advices though (taking into account that you need artifacts only from the central repo).
Here's a great example code I found at Github. An alternative could be using the REST API of the central repo. Here's an example how to do that programmatically.
BTW if you need the dependencies only, you could also use the maven-dependency-plugin directly (this is called on e.g. mvn dependency:tree
- see this thread for an example).
Probably your method can also work, but I guess it needs some missing parts.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With