Ho bisogno editing POM in fase di esecuzione. Ho usato Dom4j per leggere pom e dopo ho impostato alcuni dati. Ma ho bisogno di sapere se esiste un'altra forma per farlo. Esiste un servizio di utilità per questo?Come modificare un MOMP POM in fase di runtime?
risposta
A seconda di ciò che si sta modificando, potrebbero esserci plugin Maven. Ad esempio, il plugin MUnen release aggiorna le informazioni sulla versione nel pom.xml e controlla le modifiche nel controllo di versione.
Provare a cercare l'attività specifica che si sta tentando di eseguire (ad esempio "aggiornamento del numero di versione del plug-in maven") anziché il più generico "modify pom.xml".
Utilizzare MavenXpp3Reader
per leggere e MavenXpp3Writer
per scrivere oggetti Model
. Semplice esempio:
String baseDir = "/your/project/basedir/";
//Reading
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileInputStream(new File(baseDir, "/pom.xml")));
//Editing
model.setUrl("http://stackoverflow.com");
//Writing
MavenXpp3Writer writer = new MavenXpp3Writer();
writer.write(new FileOutputStream(new File(baseDir, "/pom.xml")), model);
E si noti che qualsiasi commento, spazi bianchi extra o linee verranno rimossi dal file.
per gli altri: maven-model.jar ha le classi a cui si fa riferimento sopra –
Riorganizza anche l'ordine dei nodi. –
Questo codice funziona per me:
package or.jrichardsz;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Writer;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
public class TestMavenPomEdit {
public static void main(String[] args) throws Exception {
//read initial pom
Model model = parsePomXmlFileToMavenPomModel("C:\\Users\\User\\Desktop\\initial_pom.xml");
//add some pom modification
Plugin plugin = new Plugin();
plugin.setGroupId("com.jelastic");
model.getBuild().addPlugin(plugin);
//write new pom
parseMavenPomModelToXmlString("C:\\Users\\User\\Desktop\\final_pom.xml", model);
}
public static Model parsePomXmlFileToMavenPomModel(String path) throws Exception {
Model model = null;
FileReader reader = null;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
reader = new FileReader(path);
model = mavenreader.read(reader);
return model;
}
public static void parseMavenPomModelToXmlString(String path,Model model) throws Exception {
MavenXpp3Writer mavenWriter = new MavenXpp3Writer();
Writer writer = new FileWriter(path);
mavenWriter.write(writer, model);
}
}
HTH
Vuoi modificare POM in memoria? Hai bisogno di scriverlo nel file system? –
Penso di aver fatto la stessa domanda una volta. [Qui] (http://stackoverflow.com/questions/2131365/is-there-a-java-class-that-generates-a-pom-xml-file) Speranza che aiuta. – Random