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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage