Programmgesteuertes Auflösen von Maven-Abhängigkeiten außerhalb eines Plugins - RepositorySystemSession und RepositorySystem
Möglicherweise wird dies eine größere Aufgabe sein, als ich ursprünglich gedacht hatte, aber trotzdem versuche ich, ein @ zu ladeMavenProject
aus einer Datei und lösen Sie dann die Abhängigkeiten auf. Ich habe den Code für beide Bits, aber ich vermisse einige Objektreferenzen, die ich brauche; speziell muss ich Instanzen von @ bekommRepositorySystemSession
undRepositorySystem
. Irgendwelche Tipps
Hinweis Ich habe diese Frage mit @ markier maven-plugin, aber das ist kein Maven-Plugin. Ich bin glücklich, Maven 3 zu beauftragen (denke, ich habe sowieso schon ..)
Hier ist der Code, den ich bisher habe:
Konstruktion desMavenProject
:
public static MavenProject loadProject(File pomFile) throws Exception
{
MavenProject ret = null;
MavenXpp3Reader mavenReader = new MavenXpp3Reader();
if (pomFile != null && pomFile.exists())
{
FileReader reader = null;
try
{
rea,der = new FileReader(pomFile);
Model model = mavenReader.read(reader);
model.setPomFile(pomFile);
ret = new MavenProject(model);
}
finally
{
// Close reader
}
}
return ret;
}
Abhängigkeiten auflösen:
public static List<Dependency> getArtifactsDependencies(MavenProject project, String dependencyType, String scope) throws Exception
{
DefaultArtifact pomArtifact = new DefaultArtifact(project.getId());
RepositorySystemSession repoSession = null; // TODO
RepositorySystem repoSystem = null; // TODO
List<RemoteRepository> remoteRepos = project.getRemoteProjectRepositories();
List<Dependency> ret = new ArrayList<Dependency>();
Dependency dependency = new Dependency(pomArtifact, scope);
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(dependency);
collectRequest.setRepositories(remoteRepos);
DependencyNode node = repoSystem.collectDependencies(repoSession, collectRequest).getRoot();
DependencyRequest projectDependencyRequest = new DependencyRequest(node, null);
repoSystem.resolveDependencies(repoSession, projectDependencyRequest);
PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
node.accept(nlg);
ret.addAll(nlg.getDependencies(true));
return ret;
}
Mir ist klar, dass dies eine ungewöhnliche Anfrage sein könnte. Vielleicht sollte ich einfach das, was ich tun wollte, ausrangieren und als Plugin verpacken ... aber ich möchte einfach das beenden, was ich jetzt begonnen habe! Danke im Voraus