您当前的位置: 首页 >  maven

$驽马十驾$

暂无认证

  • 0浏览

    0关注

    31博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Maven

$驽马十驾$ 发布时间:2022-10-09 15:08:16 ,浏览量:0

Maven
  • 1. 简介
  • 2. 安装
  • 3. 目录结构
  • 4. 生命周期(Lifecycle)
  • 5. 仓库
    • 5.1 作用
    • 5.2 分类
  • 6. 坐标
    • 6.1 作用
    • 6.2 格式
  • 7. 依赖
    • 7.1 简介
    • 7.2 配置排除依赖
    • 7.3 依赖范围
    • 7.4 依赖冲突
  • 8. 聚合
  • 9. 继承
    • 9.1 作用
    • 9.2 父 pom 配置
    • 9.3 子 pom 配置
  • 10. pom.xml
    • 10.1 打包类型:packaging
    • 10.2 其他
    • 10.3 properties
    • 10.4 作用域 scope
    • 10.4 版本号 version
    • 10.5 打包执行的插件 build
      • 10.5.1 build 标签分类
        • 10.5.1.1 全局配置(project build)
        • 10.5.1.2 环境配置(profile build)
      • 10.5.2 配置说明
        • 10.5.2.1 基本元素
        • 10.5.2.2 Resources 配置
      • 10.5.3 plugins 配置
      • 10.5.4 pluginManagement 配置

1. 简介
  • 一款帮助程序员构建项目的工具,我们只需要告诉 Maven 需要哪些 jar 包,它会帮助我们下载所有的 jar,极大提升开发效率。
  • 可从本地仓库或远程仓库(默认为 MvnRepository)中自动导入 jar 包。
  • 同一 jar 包资源路径,版本管理,统一项目结构,第三方良好的集成。
  • 通过联网在远程仓库下载的 jar 包,会存储至本地仓库(默认c:\User\用户名.m2)。
  • 是一种 XML 标记语言。
2. 安装
  • 可以使用指定的 Maven 版本,或使用 IDEA 自带的 Maven(版本3.3.9)。
  • 使用指定的 Maven 版本:需要配置环境变量,第一个变量的变量名为 M2_HOME 或 MAVEN_HOME,值为 maven 的路径。第二个变量名为 Path,值为 %MAVEN_HOME%\bin。
  • 使用 IDEA 自带的 Maven 版本:无需配置。
3. 目录结构
  • 若要使用 Maven,那么项目的目录结构必须符合 Maven 的规范。
  • project:存放 pom.xml(Maven 项目的配置文件)和所有的子目录。
  • project/src/main/java:存放项目的 java 源代码。
  • project/src/main/resources:存放项目资源文件(如:property 文件)
  • project/src/main/webapp:web 项目的根目录。
  • project/src/test/java:存放单元测试源代码(如:JUnit)。
  • project/src/test/resources:存放单元测试资源文件。
  • project/target:存放打包(编译)后的项目文件。
4. 生命周期(Lifecycle)
  • 清空:clean
  • 验证:validate
  • 编译:compile
  • 测试:test
  • 打包:package
  • 核实:verify
  • 安装,重新下载 jar 包:install
  • 站点,显示 jar 包来源:site
  • 部署:deploy
5. 仓库 5.1 作用
  • 用来存放 Maven 管理的所有 Jar 包。
  • 当项目编译时,Maven 首先从本地仓库中寻找项目所需的 Jar 包,若本地仓库没有,再到 Maven 的中央仓库下载所需 Jar 包。
5.2 分类
  • 本地仓库:本地的 Jar 包仓库。
  • 中央仓库:官方提供的远程仓库(默认为:MvnRepository)
6. 坐标 6.1 作用
  • 是 Jar 包的唯一标识,Maven 通过坐标在仓库中找到项目所需的 Jar 包。
  • 添加时,添加至 pom.xml 的
6.2 格式

   所需Jar包的项目名
   所需Jar包的模块名
   jar
   所需Jar包的版本号
   test(依赖范围)


7. 依赖 7.1 简介
  • 传递依赖:如果引用了一个 Jar 包,而该 Jar 包又引用了其他 Jar 包,那么在默认情况下项目编译,Maven 会把直接引用和间接引用(传递引用)的 Jar 包都下载到本地。
  • 排除依赖:如果只想下载直接引用的 Jar 包,那么需要在 pom.xml 中进行配置。
7.2 配置排除依赖

   
      需排除Jar包的项目名
      需排除Jar包的模块名
      pom
      需排除jar包的版本号
   


7.3 依赖范围
  • 在项目发布过程中,帮助决定哪些构件被包括进来。
值作用compile默认范围,用于编译provided类似于编译,但支持你期待 jdk 或者容器提供,类似于 classpathruntime在执行时需要test用于 test 任务时使用system需要外在提供相应的元素。通过 systemPath 来取得sysytemPath仅用于范围 system。提供相应的路径optional当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 7.4 依赖冲突
  • 若项目中多个 Jar 同时引用了相同的 Jar 时,会产生以来冲突,但 Maven 采用了两种避免冲突的策略,因此在 Maven 中是不存在依赖冲突的。
  • 短路优先:本项目->A.jar->B.jar->X1.1.jar、本项目->C.jar->X1.0.jar。若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X1.1.jar,并且C.jar也引用了X1.0.jar。此时,Maven 只会引用路径最短的 X1.0.jar。
  • 声明优先:若引用长度形相同时,在 pom.xml 中谁先被声明,就使用谁。
8. 聚合
  • 作用:将多个项目同时运行就称为聚合。
  • 实现聚合:在 pom 中进行配置:

    web-connection-pool
    web-java-crawler


9. 继承 9.1 作用
  • 在聚合多个项目时,如果这些被聚合的项目中需要引入相同的 Jar,那么可以将这些 Jar 写入父 pom 中,各个子项目继承该 pom 即可。
  • 可以通过标签来整合子模块的编译顺序。
  • 可以将一些子项目中共用的依赖或将其版本统一写到父级配置中,以便统一管理。
  • groupId、artifactId、version 可直接继承,减少子项目的 pom 配置。
9.2 父 pom 配置
  • 父级的 pom 文件只作项目的子模块的整合,在 maven install 时不会生成 jar/war压缩包。
  • 将父级项目的 pom.xml 文件的 packaging 配置设为 pom。
  • 将需要继承的 jar 包的坐标放入标签即可。

    
        
            需继承的Jar包的项目名
            需继承的Jar包的模块名
            pom
            需继承的jar包的版本号
         
    


9.3 子 pom 配置

      父pom所在项目的groupId
      父pom所在项目的artifactId
      父pom所在项目的版本号


10. pom.xml 10.1 打包类型:packaging
  • jar:默认,将所有 java 文件编译为 .class 文件,且按照原来的层级结构放置,最终压缩为一个 jar 文件。一般是内部调用或作为服务使用。
  • war:将所有 java 文件编译为 .class 文件,且将项目中依赖的所有 jar 包放在 WEB-INF/lib 文件夹,最终压缩为一个 war 包。一般用于部署。
  • pom:聚合、且父类都为 pom
10.2 其他
  • 协议版本:model/Version
  • 公司名称:name
  • 公司地址:url
  • 依赖集合:dependencies
  • 依赖:dependency
10.3 properties
  • 可在其中配置自定义属性
  • 配置:值
  • 调用属性的值:${属性名}
10.4 作用域 scope
  • compile:默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些 dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布。
  • provided:跟 compile 相似,但是表明了 dependency 由JDK或者容器提供,例如 Servlet API和一些 Java EE APIs。这个 scope 只能作用在编译和测试时,同时没有传递性。
  • runtime:表示 dependency 不作用在编译时,但会作用在运行和测试时,如 JDBC 驱动,适用运行和测试阶段。
  • test:表示 dependency 作用在测试时,不作用在运行时。只在测试时使用,用于编译和运行测试。不会随项目发布。
  • system:跟 provided 相似,但是在系统中要以外部 JAR 包的形式提供,maven 不会在 repository 查找它。
10.4 版本号 version
  • SNAPSHOT(快照版本):动态监测,非稳定版本
  • RELEASE(正式版本):根据版本号监测,版本号一致则不更新,稳定版本
10.5 打包执行的插件 build 10.5.1 build 标签分类

build 标签根据作用域分为以下两类:

10.5.1.1 全局配置(project build)

针对整个项目的所有情况都有效

  
  ...
 
  … 
  ...
 
 
10.5.1.2 环境配置(profile build)

针对不同的 profile 配置

  
  ... 
    
      
        
      …  
      
    
  ...
 
  
10.5.2 配置说明 10.5.2.1 基本元素
  
        install  
        ${basedir}/target  
        ${artifactId}-${version}  
          
                filters/filter1.properties  
          
         ...  
  
  • defaultGoal:执行 build 任务时,如果没有指定目标,将使用的默认值。如上配置,在命令行中执行 mvn,则相当于执行 mvn install。
  • directory:build 目标文件的存放目录,默认在 ${basedir}/target 目录.
  • finalName:build 目标文件的名称,默认情况为 ${artifactId}-{version}
  • filter:定义 *.properties 文件,包含一个 properties 列表,该列表会应用到支持 filter 的 resources 中。也就是说,定义在 filter 的文件中的 name=value 键值对,会在 build 时代替 ${name} 值应用到resources 中。maven 的默认 filter 文件夹为 ${basedir}/src/main/filters
10.5.2.2 Resources 配置
  
        ...  
         
            
              META-INF/plexus  
              false  
              ${basedir}/src/main/plexus  
                
                configuration.xml  
                
                
                **/*.properties  
                
           
      
      
        ...  
      
    ...  
  

用于包含或者排除某些资源文件

  • resources:一个 resources 元素的列表。每一个都描述与项目关联的文件是什么和在哪里
  • targetPath:指定 build 后的 resource 存放的文件夹,默认是 basedir。通常被打包在 jar 中的 resources 的目标路径是META_INF
  • filtering:true/false,表示为这个 resource,filter 是否激活
  • directory:定义 resource 文件所在的文件夹,默认为:${basedir}/src/main/resources
  • includes:指定那些文件将被匹配,以 * 作为通配符。
  • excludes:指定那些文件将被忽略。
  • testResources:定义和 resource 类似,只不过在 test 时使用。
10.5.3 plugins 配置
  
    ...  
      
          
            org.apache.maven.plugins  
            maven-jar-plugin  
            2.0  
            false  
            true  
              
                test  
              
            ...  
            ...  
          
      
  

用于指定使用的插件

  • GAV:指定插件的标准坐标。
  • extensions:是否加载 plugin 的 extensions,默认为 false。
  • inherited:true/false,这个 plugin 是否应用到该 pom 的孩子 pom,默认为true。
  • configuration:配置该 plugin 期望得到的 properties。
  • dependencies:作为 plugin 的依赖。
  • executions:plugin 可以有多个目标,每一个目标都可以有一个分开的配置,可以将一个 plugin 绑定到不同的阶段。假如绑定 antrun:run 目标到 verify 阶段。
10.5.4 pluginManagement 配置
  
    ...  
      
          
              
              org.apache.maven.plugins  
              maven-jar-plugin  
              2.2  
                  
                      
                        pre-process-classes  
                        compile  
                          
                            jar  
                          
                          
                            pre-process  
                          
                      
                  
              
          
      
    ...  
  

pluginManagement的配置和plugins的配置是一样的,只是用于继承,使得可以在孩子pom中使用。 则在子pom中,我们只需要配置:

  
    ...  
      
          
            org.apache.maven.plugins  
            maven-jar-plugin  
          
      
    ...  
  
关注
打赏
1663377658
查看更多评论
立即登录/注册

微信扫码登录

0.0401s