Resolvendo programaticamente dependências do Maven fora de um plug-in - obtenha RepositorySystemSession e RepositorySystem

Talvez essa seja uma tarefa maior do que eu pensava originalmente, mas, independentemente disso, estou tentando carregar umMavenProject de um arquivo e, em seguida, resolva suas dependências. Eu tenho o código para os dois bits, mas estou faltando algumas referências de objeto que eu preciso; especificamente, preciso obter instâncias deRepositorySystemSession eRepositorySystem. Alguma dica?

Nota Eu marquei esta pergunta com maven-plugin, mas este não é um plugin do Maven. Fico feliz em ordenar o Maven 3 (acho que já o tenho ..)

Aqui está o código que eu tenho até agora:

Construindo oMavenProject:

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;
}

esolvendo dependências:

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;
}

Eu percebo que isso pode ser uma solicitação incomum, talvez eu devesse apenas descartar o que estava tentando fazer e envolvê-lo como um plug-in ... mas eu meio que só quero terminar o que comecei agora! Desde já, obrigado

questionAnswers(6)

yourAnswerToTheQuestion