Existe-t-il une classe Java qui génère un fichier POM.xml?

Dans mon projet de travail, on m’a récemment demandé de générer des fichiers POM via une classe Java. Le problème est que je suis très, très nouveau à Maven (comme depuis décembre dernier).

Ce dont j’ai besoin est un code qui génère un fichier xml (un fichier pom, mais si je peux configurer un code de création de fichier XML qui conviendra), compte tenu de toutes les données nécessaires, il n’est donc pas nécessaire de l’écrire manuellement. Je ne sais pas si je m’explique, mais la question est la suivante: existe-t-il une bibliothèque ou une classe qui génère ou construit un fichier POM avec des données données? Sinon, je ne veux pas perdre plus de temps à chercher quelque chose que je ne sais pas s’il existe ou qui est aussi simple que de déclarer un object POM puis de faire un document sortingvial d = generatePom (POM p). Comme personne ne se plaint de la difficulté d’écrire des fichiers POM, je pense que c’est un moyen facile de les faire mais je pense que je me suis perdu dans beaucoup de javadoc d’API et que je ne trouve pas le chemin du retour.

Mon idée s’il n’y a pas de code pour cela est de rechercher le dictionnaire POM (pour couvrir tous les éléments) et de créer un fichier xml avec un object POM donné (que j’avais précédemment rempli avec les données que je suis fournies), à l’aide d’un générateur XML tels que JDOM, XOM ou XStream. Toute pensée à ce sujet serait appréciée s’il n’y avait aucune classe qui le fasse déjà (comme “hé! Vous le faites FAUX”).

PS: J’ai lu que le projet Eclipse est en train de faire des choses Maven et qu’il a une API qui génère un fichier pom.xml pour le projet que vous avez. Ce serait une bonne chose si je pouvais remplacer les données d’entrée ou quelque chose.

Merci pour tout!

Cela dépend de ce que vous essayez de faire. Si vous souhaitez simplement créer des POM pour de nouveaux projets d’un type certain, le meilleur moyen consiste à utiliser les archétypes Maven (vous pouvez créer vos propres archétypes avec les modèles de votre choix).

Si vous avez vraiment besoin d’écrire un POM par programmation, vous pouvez utiliser les éléments suivants:

import org.apache.maven.model.*; import org.apache.maven.model.io.xpp3.MavenXpp3Writer; ... Model model = new Model(); model.setGroupId( "some.group.id" ); ... new MavenXpp3Writer().write( w, model ); 

… où w est un java.io.Writer et vous ajoutez toute la gestion des exceptions nécessaire.

Le Javadoc est ici: http://maven.apache.org/ref/2.2.1/maven-model/apidocs/index.html

Pour accéder à cette API, vous devriez append cette dépendance:

  org.apache.maven maven-model 2.2.1  

Il existe également une API de lecture correspondante, mais gardez à l’esprit qu’elle ne fera pas toutes les opérations Maven telles que l’inheritance et l’interpolation (pour cela, une utilisation plus avancée de l’API).

  MavenXpp3Reader reader = new MavenXpp3Reader(); Model pomModel = reader.read(new FileReader(pomLibFile)); final List dependencies= pomModel.getDependencies(); final List modules= pomModel.getModules(); final List profiles = pomModel.getProfiles(); InputStream inputStream = new FileInputStream(new File(pomLibFile)); SsortingngWriter writer = new SsortingngWriter(); IOUtils.copy(inputStream, writer, "utf-8"); pomModel.getDependencyManagement(); final Properties properties = new Properties(); properties.load(new FileInputStream(pomProperties)); RegexBasedInterpolator interpolator = new RegexBasedInterpolator(); interpolator.addValueSource( new EnvarBasedValueSource() ); interpolator.addValueSource( new PropertiesBasedValueSource( properties ) ); List synonymPrefixes = new ArrayList(); synonymPrefixes.add( "project." ); synonymPrefixes.add( "pom." ); PrefixedValueSourceWrapper modelWrapper = new PrefixedValueSourceWrapper( new ObjectBasedValueSource( pomModel ),synonymPrefixes, true ); interpolator.addValueSource( modelWrapper ); PrefixedValueSourceWrapper pomPropertyWrapper = new PrefixedValueSourceWrapper( new PropertiesBasedValueSource( pomModel.getProperties() ), synonymPrefixes, true ); interpolator.addValueSource( pomPropertyWrapper ); interpolator.addValueSource( new PropertiesBasedValueSource( properties ) ); RecursionInterceptor recursionInterceptor = new PrefixAwareRecursionInterceptor( synonymPrefixes, true ); Ssortingng serializedPOM = interpolator.interpolate( writer.toSsortingng(), recursionInterceptor ); System.out.println("-------- "+serializedPOM);; 

Référence: http://plexus.codehaus.org/plexus-components/plexus-interpolation/index.html

bien que je sois toujours bloqué si je dois append plusieurs dépendances (nombre inconnu).

Pourquoi devez-vous le faire en Java plutôt que d’utiliser un outil existant tel que m2eclipse.
Consultez le guide pour créer un POM pour un projet existant à l’aide de m2eclipse.

Vous pouvez également voir le guide du développeur m2eclipse qui vous permettra de voir le code source de leur implémentation.

Répondre—-
C’est un problème commun rencontré lors de la tentative de modernisation d’un projet.
Le plus gros obstacle consiste à identifier les coordonnées Maven correctes.
Les projets font souvent référence à des fichiers JAR renommés, dans lesquels l’ID de groupe et les numéros de version ont été supprimés.

Parfois, l’inspection du manifeste dans le fichier jar donne des indications sur l’artefact dépendant correct.

Pour générer pom avec plusieurs dépendances, vous pouvez utiliser l’exemple de code suivant:

 Model model = new Model(); Writer writer = new FileWriter("C:/GRADLE_WORKSPACE/test.pom"); List dependencyList = new ArrayList(); model.setGroupId( "TestGroupArtifactID" ); model.setArtifactId("TestGroupArtifactName"); model.setVersion("1.0.0"); Dependency dep = new Dependency(); dep.setGroupId("TestGroupId"); dep.setArtifactId("TestDependencyName"); dep.setVersion("1.0.0"); dependencyList.add(dep); Dependency dep2 = new Dependency(); dep2.setGroupId("TestGroupId2"); dep2.setArtifactId("TestDependencyName2"); dep2.setVersion("2.0.0"); dependencyList.add(dep2); //model.addDependency(dep); model.setDependencies(dependencyList); new MavenXpp3Writer().write(writer, model ); writer.close(); 

Cordialement,
Srikanth Praveen