2010-05-18 4 views
2

Basé sur le post il est mentionné (par Brett Porter) qu'un POM peut être lu. Ce dont j'ai besoin, c'est de lire non seulement un seul pom. J'ai besoin de lire l'arbre entier de pom dans une construction multimodule. En commençant par la racine pom et il devrait lire automatiquement le pom de l'enfant si c'est possible? Je dois le faire dans un code Java séparé, pas en relation avec Maven lui-même.Lecture POM avec ses enfants

+0

@khmarbaise pouvez-vous me dire quel avantage tireriez-vous de la lecture de pom et de ne pas l'exécuter? – ant

+0

J'ai un projet qui est une combinaison de Make/CMake/Maven et j'ai besoin de lire les informations de dépendance des projets Java. Je sais que ce n'est pas le meilleur moyen. Je serais le premier à vouloir changer cela, mais pour le moment je n'ai pas le choix. – khmarbaise

Répondre

1

Peut-être est tricher un petit peu, mais vous pourriez peut-être appeler mvn help:effective-pom sur la pom-mère par Runtime.exec (http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29), qui vous donnera le fichier pom congolemerate de la cible que vous pom appelé sur lorsqu'il est combiné avec son parents et modules. Cela vous permettra de travailler avec un seul fichier pom et d'éviter que vous ayez à découvrir des modules/parents vous-même.

Je ne connais pas assez les librairies maven elles-mêmes pour savoir comment générer un pomnative efficace sans démarrer maven dans un autre processus, bien que je ne puisse pas imaginer que ce soit impossible. Si j'ai l'occasion de regarder, je le ferai et j'éditerai ma réponse en conséquence.

[Modifier]

est ici un lien vers le code source EffectivePomMojo qui montre comment l'aide: efficace-pom génère que xml: http://svn.apache.org/viewvc/maven/plugins/tags/maven-help-plugin-2.1.1/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java?view=markup. J'espère que cela aidera ... même si je ne suis pas familier avec la façon dont Mojo obtient son objet MavenProject ou les objets List of MavenProject qui ont une portée privée.

+0

Non, je ne peux pas appeler l'aide mvn: efficace-pom ... Je dois le faire en Java Code ... sans appel exec. – khmarbaise

2

Je mentionne que vous voulez faire cela sans maven. Essayer de le faire sans se fier à maven, ou particulièrement aux bibliothèques maven comme maven-model, maven-project-builder, impliquera beaucoup de réinvention du code déjà existant. Vous pouvez lire les fichiers POM et en extraire des données sans avoir à créer une version complète de Maven.

Le code source de Artifactory a quelques conseils utiles, comme l'utilisation

MavenXpp3Reader reader = new MavenXpp3Reader(); 
Model model = reader.read(new InputStreamReader(in, "utf-8")); 

Pour lire dans un pom Maven et obtenir le modèle. Le modèle a une méthode addModule et getModules(). Vous pouvez l'utiliser pour localiser les poms enfants par rapport au pom parent actuel.

+0

Ah désolé ... alors ma question n'était pas assez précise. Bien sûr, je peux utiliser les bibliothèques Maven. La chose que je ne peux pas faire est de laisser Maven faire le travail ... j'ai besoin des dépendances des modules etc. Mais ton indice est très bon ... Merci. – khmarbaise

+0

@mdma Le lien donné est cassé pouvez-vous s'il vous plaît le mettre à jour ASAP –

Questions connexes