Résoudre par programme les dépendances de Maven en dehors d'un plugin - get RepositorySystemSession et RepositorySystem
Peut-être que cela va être une tâche complexe que je ne l'avais pensé au départ, mais peu importe, je suis en train de charger un MavenProject
à partir d'un fichier et de le résoudre ses dépendances. J'ai obtenu le code pour les deux bits mais je suis en manque quelques références d'objet dont j'ai besoin; en particulier, j'ai besoin de pour obtenir des instances de RepositorySystemSession
et RepositorySystem
. Des conseils à donner?
Remarque: je t'ai taguée sur cette question avec maven-pluginmais ce n'est pas un plugin Maven. Je suis heureux de mandat Maven 3 (pense que j'ai déjà de toute façon..)
Voici le code que j'ai pour l'instant:
De la construction de la 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;
}
Résoudre les dépendances:
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;
}
Je constate que ce pourrait être une demande inhabituelle, peut-être que je devrais juste la ferraille ce que j'essaie de faire et l'envelopper comme un plugin...mais je veux juste terminer ce que j'ai commencé aujourd'hui! Merci à l'avance.
source d'informationauteur Ed .
Vous devez vous connecter pour publier un commentaire.
Essayer jcabi-aetherqui est un wrapper autour de Apache Aether de Sonatype:
Si vous êtes à l'extérieur du plugin Maven:
Je voudrais vous recommandons de lire les informations sur Aether lib qui est exactement pour ce genre de fins.
Remarque: l'Éther a été précédemment développé au Sonatype, mais a depuis déménagé à Eclipse.
Essayez ceci (comme peut être vu à partir de la ather-démo):
Il y a une belle série de autonome des exemples pour les Éclipses de l'Éther de l'API qui est utilisé dans la dernière Maven (3.1.1) et il peut être trouvé ici.
Remarque: Maven 3.1.X utilise encore Aether
0.9.0.M2
(et la version la plus récente qui nous a utilisé dans les exemples est0.9.0.M3
). Donc, pour exécuter ces exemples à l'intérieur d'un plugin Maven, version M2, et une application autonome qui peut utiliser la dernière M3 version.Ce qui est couvert dans "Aether/Réglage De L'Aether" pour la RepositorySystem et dans "L'éther et la Création d'un Référentiel de Système de Session" dans l'eclipse wiki.
Il n'y a pas une tonne de documentation, mais vous pouvez créer un RepositorySystem comme suit:
Notez que cela nécessite des dépendances détaillée dans "Obtenir De L'Aether"notamment
maven-aether-provider
.Lorsque vous avez votre système de référentiel le tutoriel va jusqu'à créer un RepositorySystemSession à la suite d'usine méthode: