Программное разрешение зависимостей Maven вне плагина -get RepositorySystemSession и RepositorySystem

Возможно, это будет более сложная задача, чем я изначально думал, но тем не менее я пытаюсь загрузить MavenProjectиз файла, а затем разрешить его зависимости. У меня есть код для обоих битов, но мне не хватает некоторых ссылок на объекты, которые мне нужны; в частности, мне нужно получить экземпляры RepositorySystemSessionи RepositorySystem. Какие-нибудь советы?

Примечание:Я пометил этот вопрос плагином , но это не плагин Maven. Я рад предоставить Maven 3 (, думаю, у меня уже есть..)

Вот код, который у меня есть:

СтроительствоMavenProject:

public static MavenProject loadProject(File pomFile) throws Exception
{
    MavenProject ret = null;
    MavenXpp3Reader mavenReader = new MavenXpp3Reader();

    if (pomFile != null && pomFile.exists())
    {
        FileReader reader = null;

        try
            {
            reader = new FileReader(pomFile);
            Model model = mavenReader.read(reader);
            model.setPomFile(pomFile);

            ret = new MavenProject(model);
        }
        finally
        {
            // Close reader
        }
    }

    return ret;
}

Разрешение зависимостей:

public static List getArtifactsDependencies(MavenProject project, String dependencyType, String scope) throws Exception
{    
    DefaultArtifact pomArtifact = new DefaultArtifact(project.getId());

    RepositorySystemSession repoSession = null; // TODO
    RepositorySystem repoSystem = null; // TODO

    List remoteRepos = project.getRemoteProjectRepositories();
    List ret = new ArrayList();

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

Я понимаю, что это может быть необычный запрос, может быть, мне следует просто отказаться от того, что я пытался сделать, и обернуть это как плагин... но я просто хочу закончить то, что начал сейчас!Заранее спасибо.

12
задан carlspring 23 May 2013 в 14:54
поделиться