Domanda

Nel mio progetto di lavoro che sono stati recentemente chiesto di generare file POM tramite una classe Java. Il problema è che io sono molto, molto di nuovo da Maven (come dallo scorso dicembre).

Che cosa ho bisogno è un qualche modo il codice che genera un file XML (un file pom, ma se riesco a configurare qualsiasi xml creazione di codice che andrà bene) dato tutti i dati necesary, in modo che non c'è bisogno di scriverlo da mano. Non so se mi spiego, ma la domanda è, c'è qualche libreria o di classe che genera o costruisce un file POM con una data di dati? Se non che è solo bene, solo che non voglio perdere più tempo alla ricerca di qualcosa che non so se esiste ancora o se è così semplice come dichiarare un oggetto POM e poi fare un banale documento d = generatePom (POM p). Dal momento che nessuno si lamenta di quanto sia difficile è la scrittura di file POM I supose ci dovrebbe essere un modo semplice per farlo loro, ma penso che mi sono perso in un sacco di API javadoc e non riesco a trovare la mia strada di nuovo.

La mia idea, se non esiste un codice per questo è di cercare il dizionario POM (per coprire tutti gli elementi) e creare un file XML con un dato oggetto POM (che avevo già riempito con i dati che sto fornito), utilizzando un generatore di XML come JDOM, XOM o XStream. Come trovi questo sarebbe apprezzato se non esiste una categoria che già fa questo (come 'hey! Si sta facendo male').

PS: Ho letto che il progetto Eclipse sta facendo alcune cose Maven e che ha un'API che genera un file pom.xml per il progetto vero e proprio che avete. Sarebbe una grande cosa se potessi ignorare i dati di input o qualcosa del genere.

Grazie per tutto!

È stato utile?

Soluzione

Dipende da ciò che si sta cercando di fare. Se si desidera solo per creare POM per nuovi progetti di un certo tipo, il modo migliore è attraverso archetipi Maven (è possibile creare i propri archetipi con i modelli che si desidera).

Se davvero avete la necessità di scrivere codice un POM, è possibile utilizzare il seguente:

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 );

... dove w è una java.io.Writer e si aggiunge tutta la gestione delle eccezioni necessarie.

Il Javadoc è qui: http: // Maven .apache.org / ref / / Maven-modello 2.2.1 / apidocs / index.html

Per accedere a questa API, si dovrebbe aggiungere questa dipendenza:

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

Esiste una corrispondente API lettura pure, ma tenere a mente che non farà tutte le operazioni Maven come ereditarietà e interpolazione (per farlo richiede l'utilizzo più avanzato API).

Altri suggerimenti

        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);;

Riferimento: http://plexus.codehaus.org/plexus- componenti / plesso interpolazione / index.html

se sto ancora bloccato se devo aggiungere più (numero imprecisato di) dipendenze.

Per generare pom con più dipendenze, è possibile utilizzare il seguente codice di esempio:

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();

Saluti,
Srikanth Praveen

Perché devi farlo in Java piuttosto che utilizzare uno strumento esistente, come m2eclipse.
Vedere guida per la creazione di un POM per un progetto esistente utilizzando m2eclipse.

Si potrebbe anche vedere la guida m2eclipse sviluppatore che vi permetterà di vedere il codice sorgente per la loro attuazione.

Rispondi ----
Questo è un problema comune incontrato quando si cerca di mavenise un progetto.
Il più grande ostacolo sta cercando di individuare la corretta Maven coordinate .
progetti spesso riferimento a file jar rinominati, dove il gruppo-id e numeri di versione sono stati messi a nudo fuori.

A volte ispezionando il manifesto nel vaso file dà alcuni suggerimenti in merito alla corretta manufatto dipendente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top