Maven

Maven

Maven入门

Maven项目管理工具概述

  • maven项目管理工具是apach旗下一款跨平台的项目管理工具,用于项目构建项目依赖
  • 跨平台
    • maven项目管理工具由java语言开发,所以具有跨平台特性
  • 项目构建
    • 将一个写好的项目变成一个可以运行的项目的过程
    • 项目构建阶段
      1. 清理
        • 清理上一次编译之后的字节码文件
      2. 编译
        • 将写好的项目编译为class字节码文件
      3. 测试
        • 执行项目中所有测试单元的代码
      4. 打包
        • 将写好的项目打包为指定格式的包
      5. 部署
        • 将项目发布到Tomcat服务器上
  • 项目依赖
    • 项目jar包管理
      • maven自动帮我们下载jar包,管理jar包
        maven

Maven项目管理工具的作用

  1. 在没有maven之前
    1. 手动下载jar包,构建jar包类路径
    2. 在下载jar包的过程中,需要下载jar包依赖的其他jar包
    3. 每次新建项目都要下载jar包,导致重复jar包占用项目空间
    4. 没有maven之前项目按照功能划分合作开发
  2. 有了maven之后
    1. maven自动从中央仓库或者镜像仓库下载jar包
    2. maven可以自动下载jar包依赖的其他jar包
    3. maven提供了一个本地仓库用于存放项目需要的所有jar包
    4. maven不仅可以根据功能划分项目,还可以根据项目结构 Controller,Service,Dao,Bean,Util划分项目来合作开发

Maven 功能

  • Maven 能够帮助开发者完成以下工作:
    • 构建
    • 文档生成
    • 报告
    • 依赖
    • SCMs
    • 发布
    • 分发
    • 邮件列表

Maven项目工具的具体使用

  1. 下载安装Maven项目管理工具

    • Maven 下载地址: http://maven.apache.org/download.cgi
  2. 解压配置环境变量

  • 详情见参考资料: https://www.runoob.com/maven/maven-setup.html
  1. 修改Maven配置文件

    1. 修改conf文件夹下的setting.xml

      • <localRepository>D:\repository</localRepository>
        
    2. 配置镜像仓库路径

      • <mirror>
          	<id>aliyunmaven</id>
          	<mirrorOf>*</mirrorOf>
          	<name>aliyun maven</name>
          	<url>https://maven.aliyun.com/repository/public</url>
        </mirror>
        
    3. 指定jdk版本

      • <profile>
           <id>jdk-1.8</id>
              <activation>
                  <activeByDefault>true</activeByDefault>
                  <jdk>1.8</jdk>
              </activation>
           <properties>
              <maven.compiler.source>1.8</maven.compiler.source>
              <maven.compiler.target>1.8</maven.compiler.target>
              <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
           </properties>
        </profile>
        
    4. cmd输入指令mvn -v查看Maven信息配置是否成功

Eclipse中的使用

  1. 配置Maven项目管理工具
  2. 创建项目
    1. Maven普通项目
    2. MavenWeb项目
  3. Maven项目标准结构目录
    1. Maven普通项目比普通java项目多了
      • src/test/java
      • src/test/resources
    2. MavenWeb项目比Maven普通项目多了
      • src/webapp
    3. Maven项目比普通Java项目多了pom.xml

pom.xml文件使用

  • 标签名介绍

    标签名介绍
    <project>文件的根节点
    <modelversion>pom.xml 使用的对象模型版本
    <groupId>项目名称,一般写项目的域名
    <artifactId>模块名称,子项目名或模块名称
    <version>产品的版本号
    <packaging>打包类型,一般有 jar、war、pom 等
    <name>项目的显示名,常用于 Maven 生成的文档
    <description>项目描述,常用于 Maven 生成的文档
    <dependencies>项目依赖构件配置,配置项目依赖构件的坐标
    <build>项目构建配置,配置编译、运行插件等
  1. 指定坐标

    • <!--
        坐标:指的是项目打包之后在仓库中的具体位置
        groupId:分组坐标,通常以公司域名反写命名;
        artifactId:唯一坐标,统一以项目名称命名;
        version:版本号  
      -->
        <groupId>com.danny</groupId>
        <artifactId>maven</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      
  2. 指定打包格式

    • <!--
        packaging指定打包格式:
        jar:maven普通项目最终都是打包为jar
        war:mavenweb项目最终打包格式为war
        pom:多模块项目中,父模块项目的打包格式  
      -->
        <packaging>war</packaging>
      
  3. 指定下载依赖和配置依赖作用范围

    • <!-- 
      	dependency依赖:用于下载jar包 -->    
          <!-- scope指定jar包的作用范围:
          test:指定该jar包只能应用在测试程序中,不能应用在主程序中
          provided:主程序和测试程序都可以使用,该jar包只参与编译打包,不参与部署;
          compile(默认作用范围):主程序和测试程序都可以使用,并且参与项目整个生命周期:编译打包部署
      -->
          <dependency>
         	  <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>provided</scope>
          </dependency>
      
    依赖范围对于编译classpath有效对于测试classpath有效对于运行时classpath有效例子
    compileYYYspring-core
    test-Y-Junit
    providedYY-servlet-api
    runtime-YYJDBC驱动
    systemYYY本地的.Maven仓库之外的类库
    • 测试总结:
      • 默认引入 的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
      • servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
      • jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
      • junit ----- test (测试有效) 依赖范围由强到弱的顺序是:compile>provided>runtime>test
  4. maven下载jar包依赖的其他jar包(依赖传递)

    • maven只会自动下载jar包依赖的compile范围内的jar包
  5. maven的依赖排出

    • <!--maven可以排除jar包依赖的其他jar包:-->
      <dependency>
          <groupId>com.danny</groupId>
          <artifactId>maven</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <!-- 排出maven普通项目中的junitjar包 -->
          <exclusions>
          <exclusion>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          </exclusion>
          </exclusions>
      </dependency>
      
  6. maven自动解决jar包冲突

    • maven在解决jar包冲突时:
      • 路径不同,根据就近原则选择使用jar包;
      • 路径相同时,maven选择pom.xml文件中后引入的jar包;

Maven常用命令

命令名称描述
clean清理清除项目上一次编译的字节码文件
compile编译将项目编译为字节码文件
test测试执行项目中所有的单元测试
package打包将项目打包为指定格式的包,存放在target目录下(不会放到仓库中)
install/deploy部署将项目打包为指定格式的包,并将项目存放到仓库中
  • 清理

    • 通过clean插件执行清理操作:maven-clean-plugin:2.5:clean
  • 编译

    • 绑定插件maven-resources-plugin:2.6:resources扫描项目主程序文件
    • 绑定插件maven-compiler-plugin:3.1:compile:编译项目主程序文件
  • 测试

    • 绑定插件maven-resources-plugin:2.6:resources扫描项目主程序文件

    • 绑定插件maven-compiler-plugin:3.1:compile:编译项目主程序文件

    • 绑定插件maven-resources-plugin:2.6:testResources :扫描测试程序

    • 绑定插件maven-compiler-plugin:3.1:testCompile:编译测试程序

    • 绑定插件maven-surefire-plugin:2.12.4:test:执行测试单元并生成测试报告

    • 设置执行所有单元测试:

      • 	<build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.12</version>
                        <configuration>
                            <includes>
                                <include>*\*\*\*Test.java</include>
                                <include>**\*</include>
                            </includes>
                        </configuration>
                    </plugin>
                </plugins>
            </build> 
        
  • 打包

    • 绑定插件maven-resources-plugin:2.6:resources扫描项目主程序文件
    • 绑定插件maven-compiler-plugin:3.1:compile:编译项目主程序文件
    • 绑定插件maven-resources-plugin:2.6:testResources :扫描测试程序
    • 绑定插件maven-compiler-plugin:3.1:testCompile:编译测试程序
    • 绑定插件maven-surefire-plugin:2.12.4:test:执行测试单元并生成测试报告
    • 绑定插件maven-jar-plugin:2.4:jar :将项目打包为指定格式存放到target目录下
  • 部署

    • 绑定插件maven-resources-plugin:2.6:resources扫描项目主程序文件
    • 绑定插件maven-compiler-plugin:3.1:compile:编译项目主程序文件
    • 绑定插件maven-resources-plugin:2.6:testResources :扫描测试程序
    • 绑定插件maven-compiler-plugin:3.1:testCompile:编译测试程序
    • 绑定插件maven-surefire-plugin:2.12.4:test:执行测试单元并生成测试报告
    • 绑定插件maven-jar-plugin:2.4:jar :将项目打包为指定格式存放到target目录下
    • 绑定插件maven-install-plugin:2.4:install:将打包好的项目部署到本地仓库

Maven 构建生命周期

  • Maven 构建生命周期定义了一个项目构建跟发布的过程。
  • 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:
img
阶段处理描述
验证 validate验证项目验证项目是否正确且所有必须信息是可用的
编译 compile执行编译源代码编译在此阶段完成
测试 Test测试使用适当的单元测试框架(例如JUnit)运行测试。
包装 package打包创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify检查对集成测试的结果进行检查,以保证质量达标
安装 install安装安装打包的项目到本地仓库,以供其他项目使用
部署 deploy部署拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
  • 为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。
  • Maven 有以下三个标准的生命周期:
    • clean:项目清理的处理
      1. pre-clean:执行一些需要在clean之前完成的工作
      2. clean:移除所有上一次构建生成的文件
      3. post-clean:执行一些需要在clean之后立刻完成的工作
    • default(或 build):项目部署的处理
      • 默认生命周期:编译,测试,打包,部署
    • site:项目站点文档创建的处理
      1. pre-site:执行一些需要在生成站点文档之前完成的工作
      2. site:生成项目的站点文档
      3. post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
      4. site-deploy:将生成的站点文档部署到特定的服务器上

Maven多模块项目

多模块中的聚合

  • <modules>

  • 多模块项目中的聚合标签

    • 可以提高操作父项目模块来操作它的各个子模块项目

    • <modules>
          <module>controller</module>
          <module>service</module>
          <module>dao</module>
          <module>bean</module>
          <module>util</module>
      </modules>
      

多模块中的继承

  • <parent>

  • 多模块项目中的继承标签

    • 继承标签里面的坐标代表继承的父项目,包含父类项目中以下内容

      • 项目坐标的groupIdversion
      • 项目描述信息
      • compile作用范围内的jar包
      • 统一定义的变量
    • <parent>
          <artifactId>parent</artifactId>
          <groupId>com.offcn</groupId>
          <version>1.0-SNAPSHOT</version>
      </parent>
      

统一变量定义

  • <properties>

  • 统一变量替换,通过${变量名}获取变量

    • <properties>
          <spring.version>5.1.2.RELEASE</spring.version>
      </properties>
      ...
      <version>${spring.version}</version>
      

统一jar包版本管理(锁定版本)

  • <dependencyManagement>

  • 统一jar包版本管理,只是声明jar包版本,不做jar包下载

  • 子类项目如果需要使用父类声明过的jar包可以直接通过<dependency>标签增加依赖,但不需要输入版本号,如下

  • 父类pom.xml

    • <properties>
          <spring.version>5.1.2.RELEASE</spring.version>
      </properties>
      <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-context</artifactId>
                 <version>${spring.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-jdbc</artifactId>
                 <version>${spring.version}</version>
             </dependency>
         </dependencies>
      </dependencyManagement>
      
  • 子类pom.xml

    • <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
         </dependency>
      </dependencies>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值