Question

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

Ce que j'ai besoin est un code en quelque sorte qui génère un fichier xml (un fichier pom, mais si je peux configurer un code créant xml qui sera fin) compte tenu de toutes les données necesary, donc ils ne ont pas besoin de l'écrire par main. Je ne sais pas si je suis moi-même expliquais, mais la question est, est-il une bibliothèque ou une classe qui génère ou construit un fichier POM avec les données fournies? Sinon c'est très bien, je veux juste ne pas perdre plus de temps à chercher quelque chose que je ne sais pas si elle existe même ou si est aussi simple que déclarer un objet POM et de faire ensuite un trivial document d = generatePom (POM p). Puisque personne ne se plaint de la façon dont est difficile d'écrire des fichiers POM je supose qu'il devrait y avoir un moyen facile de les faire, mais je pense que je me suis perdu dans beaucoup d'API javadoc et je ne peux pas trouver 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 créer un fichier xml avec un objet POM donné (que j'avais déjà rempli avec les données que je suis fourni), à l'aide un générateur XML tel que JDOM, XOM ou XStream. Toute réflexion sur ce serait apprécié s'il n'y a pas de classe qui fait déjà (comme « Hé! Vous faites fausse route »).

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

Merci pour tout!

Était-ce utile?

La solution

Cela dépend de ce que vous essayez de faire. Si vous voulez juste créer POMs pour de nouveaux projets d'un certain type, le meilleur moyen est par archétypes Maven (vous pouvez créer vos propres archétypes avec les modèles que vous voulez).

Si vous avez vraiment besoin d'écrire un programme POM, 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 que vous ajoutez toutes les manipulations d'exception nécessaire.

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

Pour accéder à cette API, vous devez ajouter cette dépendance:

<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-model</artifactId>
  <version>2.2.1</version>
</dependency>

Il existe une API de lecture correspondant aussi bien, mais gardez à l'esprit que ce ne sera pas faire toutes les opérations telles que Maven inheritence et interpolation (faire qui nécessite l'utilisation de l'API plus avancé).

Autres conseils

        MavenXpp3Reader reader = new MavenXpp3Reader();
        Model pomModel = reader.read(new FileReader(pomLibFile));
        final List<Dependency> dependencies= pomModel.getDependencies();
        final List<String> modules= pomModel.getModules();
        final List<Profile> profiles = pomModel.getProfiles();

        InputStream inputStream = new FileInputStream(new File(pomLibFile));
        StringWriter writer = new StringWriter();
        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<String> synonymPrefixes = new ArrayList<String>();
        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 );

        String serializedPOM = interpolator.interpolate( writer.toString(), recursionInterceptor );
        System.out.println("-------- "+serializedPOM);;

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

bien que je suis toujours coincé si je dois ajouter plusieurs (nombre inconnu) dépendances.

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

Model model = new Model();  
Writer writer = new FileWriter("C:/GRADLE_WORKSPACE/test.pom");  
List<Dependency> dependencyList = new ArrayList<Dependency>();  

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

Pourquoi avez-vous le faire en Java plutôt que d'utiliser un outil existant tel que m2eclipse.
Voir Guide pour créer un POM pour un projet existant en utilisant m2eclipse.

Vous pouvez également voir le maven coordonnées .
projets réfèrent souvent à des fichiers jar Renommés, où le groupe id, et les numéros de version ont été enlevèrent.

Parfois, l'inspection du manifeste dans le pot-fichier donne quelques conseils à l'artefact dépendant correct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top