Maven系统学习

1、  

  1.1  何为构建

        编译、测试、运行、打包、部署等工作;

        Maven就是用软件的办法让这一系列工作自动化,只需要一条简单的命令,所有繁琐的工作就会自动完成;

        Maven最大的消除了构建的重复,抽象了生命周期,标准化了构建过程

  1.2  Maven不仅仅是构建工具、还是依赖管理工具、项目信息管理工具

        Maven为全世界的Java开发者提供了一个免费的中央仓库;

  1.3  Maven的安装与配置

      1.1  环境变量中新建变量:maven_home   Maven的安装目录

      1.2  环境变量配置path:

           当我们在cmd中输入命令时,

              window首先会在当前目录寻找可执行的文件或脚本;

              如果没有找到,Windows接着遍历环境变量path中定义的路径;

              由于将%maven_home%\bin添加到了path中,而%maven_home%实际是引用了前面定义的另一个变量,其值是Maven的安装目录;

              Windows会在执行命令时搜索目录maven\bin 下的执行脚本;

      1.3  安装目录分析 

            bin:

              包含了mvn运行的脚本

            boot:

              只包含了一个文件***.jar,是一个类加载器框架,相对于默认的java类加载框架,提供了更丰富的语法,Maven使用该框架加载自己的类库;

            conf:

              其中的settings.xml文件可以全局的定制Maven的行为;

              maven目录/conf/settings.xml:全局范围;

              ~/.m2/settings.xml:用户范围;

            lib:

              该目录包含了Maven运行时所有用到的java类库;

2、Maven基本使用 

    1.1  pom.xml

          Maven项目的核心是pom.xml;

          定义了项目的基本信息,用于描述项目如何构建、声明依赖。。。;

          pom.xml中没有任何的java代码,体现了Maven的一大有点:让项目对象模型最大程度与实际代码相独立(解耦);

    1.2  项目主代码(src/main/java)

          会被打包到最终的构件(jar)中;

         项目测试代码(src/test/java)

          只在运行测试时用到,不会被打包;  

         mvn clean:

             告诉Maven清理删除输出目录target/;

              默认情况下,Maven构建的所有输出都在target、目录中;

         mvn compile:        

              告诉maven编译src/main/java下的代码;

              默认情况下,maven将主代码编译至target/classes目录中;

         mvn package:

              将项目主代码打包成一个jar或者别的包的文件,该文件位于target/目录下;

         mvn install:

              将打包好的项目安装到本地仓库后,其他的Maven项目才能使用打包的项目;

3、Maven的坐标

    1.1  世界上的任何一个构件都可以使用Maven坐标来唯一标识

    1.2  groupId:  Maven项目的名称

        artifactId:  maven项目模块

        version:  maven项目的版本

        packaging:  maven 项目的打包方式

    1.3      <dependency>

          <groupId..

          <artifactId..

          <version..

          <type></type>  依赖的类型,默认为jar,对应于项目定义的packaging

          <scope></scope>  依赖的范围:compile,test,provided,runtime,system,import

 

          <optional></optional>  标记依赖是否可选

          <exclusions></exclusions>  排除传递性依赖

        </dependency>

4、Maven仓库

    1.1  本地仓库、远程仓库(私服[局域网内的]、中央仓库[国外的])

    1.2  镜像

          如果仓库A可以提供仓库B存储的所有内容,那么可以认为A是B的一个镜像;

5、Maven的聚合

    1.1  把项目的各个模块聚合在一起构建

        <modules></modules>  实现聚合的最核心的配置,一般位于项目目录的最顶层

6、Maven的继承

    1.1  帮助抽取各模块相同的依赖和插件等配置

         <parent>    父模块

          <groupId..

          <artifactId...

          <version...

          <relativePath></relativePath>  当项目构建时,Maven首先根据relativePath寻找父POM,如果找到父POM,就不需要去本地仓库找;

            如果找不到,再去本地仓库查找;

         <parent> 

  聚合和继承的关系:

      聚合POM、继承关系的父POM的packaging都必须是POM

7、Maven的依赖管理 

    1.1  <dependencies></dependencies>  

           该元素说明  依赖会被继承

    1.2  <dependencyManagement></dependencyManagement>  

           该元素  既能让子模块继承到父模块的依赖配置,又可保证子模块依赖使用的灵活性;

           在dependencyManagement元素下声明的依赖不会引入实际的依赖,但能够约束dependencies元素下的依赖使用

8、Maven的插件管理

    1.1  <pluginManagement></pluginManagement>  ???暂搁置

9、Maven的灵活构建

    一个优秀的构建系统必须足够灵活,让项目在不同的环境下都能成功构建:

       如:开发、测试、生产环境下数据库的不同配置;

    maven为了支持构建的灵活性,内置了三大特性:

      1、Maven属性:

        1.1  内置属性:

              ${basedir}  项目根目录

              ${version}  项目版本

        1.2  POM属性:

              用户可以使用该类(project)属性引用pom文件中对应的元素的值;

                

        1.3  自定义属性:

              

        1.4  Settings属性:

              与pom属性类似;

              使用以settings.开头的属性  将会 引用 settings.xml文件中的元素的值;eg:${settings.localRepository}

        1.5  java系统属性:

              所有的java系统属性都可以使用Maven属性引用:

                eg:${user.home}指向用户目录

        1.6  环境变量的属性:

              所有的环境变量都可以使用以env.开头的Maven属性引用:

                eg:${env.JAVA_HOME}指向java的环境变量;

        1.7  Maven属性只有在pom.xml中才会被解析,放到资源文件中是不会自动解析的,因此需要让Maven解析资源文件中的Maven属性:

              资源文件的处理是由maven-resources-plugin做的事情

                默认的行为:将项目主资源源文件复制到主代码编译输出的目录中,将测试资源文件复制到财务室代码编译输出目录中

              【如何让Maven解析资源文件中的Maven属性???(开启资源过滤)】

                

                 使用命令行激活profile:mvn clean install -Pdev  -P:在命令行激活一个profile

      2、profile

         1.1   profile的激活方式:

                  a,  命令行激活:多个profile之间以逗号分隔

                    mvn clean install -Pdev 

                  b,  settings.xml显式激活:

                    

                  c,  系统属性激活

                    

                  d,  操作系统属性激活

                     

                     

                  e,  文件存在与否激活

                     

                  f,  默认激活

                    

         1.2  profile的种类:

               pom.xml  只对当前项目有效

               用户settings.xml  对该用户所有的Maven项目有效

               全局settings.xml  conf目录下的,对本机上所有的Maven项目均有效

     3、Web资源过滤

         在web项目中,资源文件位于src/main/resources/目录下;

          web项目中还有一种静态资源,eg:css,js...

              

                                       

      

 

posted on   anpeiyong  阅读(461)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示