You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于groupId和artifactId读取多模块项目pom依赖存入List<Dependency>

实现将pom.xml依赖读取到List的方案

1. 多模块项目pom定位方案

无需写死绝对路径,可通过两种方式获取目标pom文件对象:

  • 若解析本地Maven仓库中的pom,可通过已定位到的groupId、artifactId、version拼接相对路径:System.getProperty("user.home") + "/.m2/repository/" + groupId.replace(".", "/") + "/" + artifactId + "/" + version + "/" + artifactId + "-" + version + ".pom"
  • 若解析当前项目内子模块的pom,可通过类路径加载:this.getClass().getClassLoader().getResource("子模块相对路径/pom.xml").getFile()

2. 依赖解析实现

推荐使用Maven官方API解析,避免自定义XML解析的格式兼容问题,也可选择轻量XML解析工具实现。

方案一:Maven原生API解析(推荐)

首先引入解析依赖到你的项目pom中:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-model</artifactId>
    <version>3.8.6</version>
</dependency>
<dependency>
    <groupId>org.codehaus.plexus</groupId>
    <artifactId>plexus-utils</artifactId>
    <version>3.4.2</version>
</dependency>

解析代码如下,直接返回官方org.apache.maven.model.Dependency类型的列表:

import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import java.io.File;
import java.io.FileReader;
import java.util.List;

public class PomParser {
    public List<Dependency> getDependenciesFromPom(File pomFile) throws Exception {
        MavenXpp3Reader reader = new MavenXpp3Reader();
        Model pomModel = reader.read(new FileReader(pomFile));
        // 直接返回解析完成的依赖列表
        return pomModel.getDependencies();
    }
}

如果需要转为自定义的Dependency类,按如下方式转换即可:

// 自定义Dependency示例
public class CustomDependency {
    private String groupId;
    private String artifactId;
    private String version;

    public CustomDependency(String groupId, String artifactId, String version) {
        this.groupId = groupId;
        this.artifactId = artifactId;
        this.version = version;
    }
    // 省略getter、setter
}

// 转换代码
public List<CustomDependency> getCustomDependencies(File pomFile) throws Exception {
    MavenXpp3Reader reader = new MavenXpp3Reader();
    Model pomModel = reader.read(new FileReader(pomFile));
    return pomModel.getDependencies().stream()
            .map(dep -> new CustomDependency(dep.getGroupId(), dep.getArtifactId(), dep.getVersion()))
            .toList();
}

方案二:Dom4j轻量解析(无需引入Maven依赖)

适合轻量场景使用,首先引入Dom4j依赖:

<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version>
</dependency>

解析代码:

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class LightweightPomParser {
    public List<CustomDependency> parsePom(File pomFile) throws Exception {
        List<CustomDependency> result = new ArrayList<>();
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(pomFile);
        Element root = document.getRootElement();
        Element dependenciesNode = root.element("dependencies");
        if (dependenciesNode == null) {
            return result;
        }
        List<Element> depNodes = dependenciesNode.elements("dependency");
        for (Element depNode : depNodes) {
            String groupId = depNode.elementTextTrim("groupId");
            String artifactId = depNode.elementTextTrim("artifactId");
            String version = depNode.elementTextTrim("version");
            result.add(new CustomDependency(groupId, artifactId, version));
        }
        return result;
    }
}

3. 特殊场景补充

如果你是在开发Maven插件,无需手动解析文件,直接注入MavenProject对象,调用mavenProject.getDependencies()即可直接拿到依赖列表。

内容的提问来源于stack exchange,提问作者EvgenyMalkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:45:05