【问题标题】:How to edit a maven POM at runtime?如何在运行时编辑 Maven POM?
【发布时间】:2011-02-18 04:27:21
【问题描述】:

我需要在运行时编辑 POM。我使用 Dom4j 读取 pom,然后设置一些数据。但我需要知道是否存在另一种形式来做到这一点。是否存在为此的 Maven 实用程序?

【问题讨论】:

  • 你想修改内存中的一个POM吗?需要写入文件系统吗?
  • 我想我曾经问过同样的问题。 Here希望对您有所帮助。

标签: runtime maven editing pom.xml


【解决方案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://stackoverflow.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”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2012-09-23
      • 2021-08-28
      • 1970-01-01
      相关资源
      最近更新 更多