Программно разрешать зависимости Maven вне плагина - получить RepositorySystemSession и RepositorySystem
Может быть, это будет большая задача, чем я первоначально думал, но независимо от того, я пытаюсь загрузитьMavenProject
из файла, а затем разрешите его зависимости. У меня есть код для обоих битов, но мне не хватает некоторых ссылок на объекты, которые мне нужны; в частности, мне нужно получить экземплярыRepositorySystemSession
а такжеRepositorySystem
. Какие-нибудь советы
Заметка Я отметил этот вопрос как Maven-плагин, но это не плагин 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
{
rea,der = new FileReader(pomFile);
Model model = mavenReader.read(reader);
model.setPomFile(pomFile);
ret = new MavenProject(model);
}
finally
{
// Close reader
}
}
return ret;
}
Разрешение зависимостей:
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;
}
Я понимаю, что это может быть необычный запрос, может быть, я должен просто отказаться от того, что я пытался сделать, и обернуть это как плагин ... но я просто хочу закончить то, что начал сейчас! Заранее спасибо