`

maven 代码解析

 
阅读更多

 

 public Model getSuperModel( String version )

    {

        if ( superModel == null )

        {

            String resource = "/org/apache/maven/model/pom-" + version + ".xml";

 

            InputStream is = getClass().getResourceAsStream( resource );

 

            if ( is == null )

            {

                throw new IllegalStateException( "The super POM " + resource + " was not found"

                    + ", please verify the integrity of your Maven installation" );

            }

 

            try

            {

                Map<String, String> options = new HashMap<String, String>();

                options.put( "xml:4.0.0", "xml:4.0.0" );

                superModel = modelProcessor.read( is, options );

            }

            catch ( IOException e )

            {

                throw new IllegalStateException( "The super POM " + resource + " is damaged"

                    + ", please verify the integrity of your Maven installation", e );

            }

        }

 

        return superModel;

    }

加载supermodle的目录是:/org/apache/maven/model/pom-*.xml

maven解析pom文件的代码

 for ( ModelData currentData = resultData; currentData != null; )

        {

            lineage.add( currentData );

 

            Model tmpModel = currentData.getModel();

 

            Model rawModel = tmpModel.clone();

            currentData.setRawModel( rawModel );

 

            problems.setSource( tmpModel );

 

            modelNormalizer.mergeDuplicates( tmpModel, request, problems );

 

            profileActivationContext.setProjectProperties( tmpModel.getProperties() );

 

            List<Profile> activePomProfiles =

                profileSelector.getActiveProfiles( rawModel.getProfiles(), profileActivationContext, problems );

            currentData.setActiveProfiles( activePomProfiles );

 

            for ( Profile activeProfile : activePomProfiles )

            {

                profileInjector.injectProfile( tmpModel, activeProfile, request, problems );

            }

 

            if ( currentData == resultData )

            {

                for ( Profile activeProfile : activeExternalProfiles )

                {

                    profileInjector.injectProfile( tmpModel, activeProfile, request, problems );

                }

            }

 

            if ( currentData == superData )

            {

                break;

            }

 

            configureResolver( request.getModelResolver(), tmpModel, problems );

 

            currentData = readParent( tmpModel, currentData.getSource(), request, problems );

 

            if ( currentData == null )

            {

                currentData = superData;

            }

            else if ( !parentIds.add( currentData.getId() ) )

            {

                String message = "The parents form a cycle: ";

                for ( String modelId : parentIds )

                {

                    message += modelId + " -> ";

                }

                message += currentData.getId();

 

                problems.add( new ModelProblemCollectorRequest( ModelProblem.Severity.FATAL, ModelProblem.Version.BASE ).setMessage( message ) );

                throw problems.newModelBuildingException();

            }

        }

从这里可以说明,pom的文件内容是先整合当前pom内容,然后整合parent最后整合superpom文件内容

分享到:
评论

相关推荐

    maven 代码混淆.zip

    代码混淆是将源代码中的类名、方法名、变量名等替换为无意义的简短名称,以防止他人逆向工程解析原始逻辑。这对于开源项目或发布到公共平台的应用尤其重要,可以有效防止恶意抄袭和攻击。 在Maven项目中,我们通常...

    springMVC+MyBatis整合Maven代码

    在实际项目中,将这两个框架整合并利用Maven进行构建,可以极大地提高开发效率和代码的可维护性。下面我们将详细探讨如何进行SpringMVC、MyBatis与Maven的整合。 首先,Maven是一个项目管理和综合工具,它通过定义...

    尚硅谷Maven课程笔记代码资源

    Maven通过解析POM文件中的依赖声明,自动从仓库中下载所需jar包。 三、Maven生命周期与插件 Maven的生命周期由多个阶段(如编译、测试、打包、部署等)组成,每个阶段对应一组特定的目标(goal)。开发者可以通过...

    freemarker+spring+maven代码

    2. **配置Spring MVC**:在`WEB-INF`目录下创建`dispatcher-servlet.xml`文件,配置Spring MVC的核心组件,包括视图解析器(FreeMarkerViewResolver),如: ```xml ``` 3. **创建FreeMarker模板**:...

    Maven3实战笔记05仓库依赖解析与插件解析

    ### Maven3实战笔记05仓库依赖解析与插件解析 #### 一、Maven仓库依赖解析 Maven 是一个项目管理和构建工具,它通过一种称为“仓库依赖解析”的过程来管理项目的依赖关系。仓库依赖解析是指Maven如何查找并解决...

    maven源代码.zip

    二、Maven源代码解析 Maven源代码包含了大量的核心组件和插件,其中最重要的是POM解析器、依赖管理和生命周期执行器。通过对源码的学习,我们可以了解到Maven如何解析POM文件,如何处理依赖关系,以及如何调用插件...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    ** Maven 概述** Maven 是一个强大的项目...通过理解并熟练使用Maven,开发者可以更专注于编写代码,而无需关心构建过程的复杂性。在实际工作中,正确配置和利用Maven可以大大提高团队的开发效率和项目的可维护性。

    maven本地仓库安装代码

    ### Maven安装代码详解 在提供的代码片段中,使用了`mvn install:install-file`命令来将指定的JAR包安装到本地仓库中。具体命令如下: ```shell mvn install:install-file -Dfile=D:\mvn\spring-context-support-...

    Maven仓库apache-maven-3.2.5

    插件是Maven功能的扩展,例如maven-compiler-plugin用于编译源代码,maven-surefire-plugin用于运行单元测试。通过在pom.xml中配置插件,开发者可以自定义构建过程,实现各种复杂的需求。 除了基本功能外,Maven还...

    maven3.0 maven3.0

    3. **增强的插件管理**:Maven 3.0 引入了插件版本管理,允许在父POM中定义插件版本,子模块可以直接继承,减少了重复代码,提高了代码的可维护性。 4. **更灵活的生命周期**:Maven 3.0 改进了生命周期阶段,使得...

    apache-maven-3.6.2_maven_

    这个版本是Maven的一个稳定版本,包含了执行构建、解析依赖、生成文档以及执行各种构建任务所需的所有组件。 Maven 的工作流程主要围绕POM进行,POM是一个XML文件,它描述了项目的配置信息,包括项目的基本信息(如...

    maven API maven API

    4. **构建脚本 (pom.xml)**: POM文件不仅是项目配置,也可以通过Maven API动态生成或解析。这在多模块项目或自动化环境中非常有用。 **三、Maven API 的优势** 1. **标准化**: Maven统一了Java项目的构建过程,...

    Java FreeMarker+Maven实现代码自动生成

    6. **代码生成**:当Maven执行到配置的阶段时,FreeMarker模板将被解析,数据模型将填充到模板中,生成的代码会被写入到指定的输出目录,成为项目的一部分。 7. **最佳实践**:为了保持代码生成的灵活性和可维护性...

    maven 例子

    通过Maven,开发者可以方便地下载所需库,编译源代码,执行测试,打包应用,甚至部署到服务器。 【 Maven 项目结构】 Maven 项目通常遵循一种标准的目录结构,包括以下几个关键部分: 1. `pom.xml`:这是项目对象...

    Maven3.5.4本地安装包

    开发者可以使用插件扩展Maven的功能,例如,`maven-jar-plugin`用于打包JAR文件,`maven-war-plugin`用于打包WAR文件,`maven-compiler-plugin`负责编译源代码。 - **聚合与继承**:Maven支持项目聚合和继承,通过`...

    sonarqube jenkins svn maven代码质量检查.pdf

    根据提供的文件信息,本文将深入解析SonarQube、Jenkins、SVN以及Maven在代码质量检查中的集成应用。 ### SonarQube SonarQube是一个开源的代码质量管理系统,它不仅提供了质量报告的功能,更是一个全面的代码质量...

    maven项目中的EL表达式问题

    这行代码告诉服务器不要忽略JSP中的EL表达式,从而使其能够被正确解析。 2. **在web.xml中配置**: ```xml *.jsp &lt;el-ignored&gt;false &lt;scripting-invalid&gt;true ``` 通过这种方式,可以指定所有扩展名...

    azkaban3.51.3 maven版代码

    6. **src**:这个目录通常包含项目的源代码,根据Maven的标准目录结构,可能有`src/main/java`用于存放Java代码,`src/main/resources`存放资源配置,以及`src/test`存放测试代码。 将Azkaban改造为Maven项目的好处...

    maven3.8下载包

    Maven通过执行不同的生命周期阶段,如`clean`(清理项目)、`compile`(编译源代码)、`test`(运行测试)、`package`(打包应用)和`deploy`(部署应用),帮助开发者完成整个开发流程。通过命令行参数,你可以指定...

    Apache-maven-3.1.1

    每个Maven项目都有一个POM.xml文件,Maven通过解析这个文件来知道如何构建项目。 2. **依赖管理(Dependency Management)**:Maven通过POM中的元素管理项目所需的各种库。它自动下载这些库并将其添加到类路径中,...

Global site tag (gtag.js) - Google Analytics