本文次要钻研一下如何解析pom文件

maven-model

maven提供了maven-model的类库能够间接解析

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

应用

        MavenXpp3Reader xpp3Reader = new MavenXpp3Reader();        Model model = xpp3Reader.read(new ByteArrayInputStream(data));        Properties properties = model.getProperties();
应用MavenXpp3Reader能够间接读取pom文件,之后就能够失去Model

Model

maven-model-3.9.4-sources.jar!/org/apache/maven/model/Model.java

public class Model extends ModelBase implements Serializable, Cloneable {    private String modelVersion;    private Parent parent;    private String groupId;    private String artifactId;    private String version;    private String packaging = "jar";    private String name;    private String description;    private String url;    private String childProjectUrlInheritAppendPath;    private String inceptionYear;    private Organization organization;    private List<License> licenses;    private List<Developer> developers;    private List<Contributor> contributors;    private List<MailingList> mailingLists;    private Prerequisites prerequisites;    private Scm scm;    private IssueManagement issueManagement;    private CiManagement ciManagement;    private Build build;    private List<Profile> profiles;    private String modelEncoding = "UTF-8";    private File pomFile;    //......}    
Model继承了ModelBase

ModelBase

maven-model-3.9.4-sources.jar!/org/apache/maven/model/ModelBase.java

public class ModelBase implements Serializable, Cloneable, InputLocationTracker {    private List<String> modules;    private DistributionManagement distributionManagement;    private Properties properties;    private DependencyManagement dependencyManagement;    private List<Dependency> dependencies;    private List<Repository> repositories;    private List<Repository> pluginRepositories;    private Object reports;    private Reporting reporting;    private Map<Object, InputLocation> locations;    private InputLocation location;    private InputLocation modulesLocation;    private InputLocation distributionManagementLocation;    private InputLocation propertiesLocation;    private InputLocation dependencyManagementLocation;    private InputLocation dependenciesLocation;    private InputLocation repositoriesLocation;    private InputLocation pluginRepositoriesLocation;    private InputLocation reportsLocation;    private InputLocation reportingLocation;    //......}    
ModelBase定义了诸如properties、dependencyManagement、dependencies等

小结

maven提供了maven-model能够间接解析pom,它内置了对pom文件的model,能够用来疾速剖析依赖等。