如何在运行时编辑 Maven POM?
Posted
技术标签:
【中文标题】如何在运行时编辑 Maven POM?【英文标题】:How to edit a maven POM at runtime? 【发布时间】:2011-02-18 04:27:21 【问题描述】:我需要在运行时编辑 POM。我使用 Dom4j 读取 pom,然后设置一些数据。但我需要知道是否存在另一种形式来做到这一点。是否存在为此的 Maven 实用程序?
【问题讨论】:
你想修改内存中的一个POM吗?需要写入文件系统吗? 我想我曾经问过同样的问题。 Here希望对您有所帮助。 【参考方案1】:此代码适用于我:
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);
TestMavenPomEdit.java
HTH
【讨论】:
【参考方案2】:使用MavenXpp3Reader
读取和MavenXpp3Writer
写入Model
对象。简单例子:
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://***.com");
//Writing
MavenXpp3Writer writer = new MavenXpp3Writer();
writer.write(new FileOutputStream(new File(baseDir, "/pom.xml")), model);
请注意,任何注释、多余的空格或行都将从文件中删除。
【讨论】:
对于其他人:maven-model.jar 具有上面引用的类 它还重新组织了节点的顺序。【参考方案3】:根据您要更改的内容,可能会有 maven 插件。例如 maven release 插件更新 pom.xml 中的版本信息并将更改检查到版本控制中。
尝试搜索您尝试完成的特定任务(例如“maven 插件版本号更新”),而不是更通用的“修改 pom.xml”。
【讨论】:
以上是关于如何在运行时编辑 Maven POM?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Maven 中从 pom.xml 调用 testng.xml 文件