maven学习笔记

Maven学习笔记

一、什么是maven

  • Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
  • Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理
  • 使用Maven的优点
      1. 方便jar包的管理
      2. 不需要上传jar包上svn

二、使用Maven

2.1 安装Maven,配置环境

  • 官网下载地址
  • 配置环境变量
    • 我的电脑->属性->高级系统设置->环境变量
      • 新建系统变量
        • 变量名:MAVEN_HOME
        • 变量值:解压的maven目录的全路径
      • 编辑系统变量path
        • 新增值:%MAVEN_HOME%\bin

2.2 Maven本地仓库

  • 用来存放下载到本地的jar包

  • 默认存放路径为:c:\user\用户名.m2\repository

  • 配置方法:修改conf目录下的settings.xml(3.6.1版本的路径,不同版本可能不一样)

    • <!-- 在settings标签下添加 -->
      <localRepository>D:\Maven\Repository</localRepository>
      <!-- 将本地仓库修改至D:\Maven\Repository目录下 -->
      
  • 在cmd中更新maven本地仓库:mvn help:system

    • maven默认会从中央仓库中下载jar包到本地,但是默认的地址在国外,可能无法使用,因此需要配置镜像站
  • 配置镜像仓库(阿里云)

    • <!-- 在settings标签下的mirrors标签下添加 -->
      <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
      </mirror>
      

2.3 在Eclipse下配置本地maven

  • 选项栏中的Window->Preferences->Maven->Installations右边的Add添加Maven的目录,并✔选择它
  • 在同Maven目录下的User Settings中的Global Settings和User Settings选择maven配置文件ssettings.xml
  • 旧版可能不集成maven插件,需要自己下载
  • [外链图片转存失败(img-wYSReeuG-1562678962396)(E:\学习资料\博客计划\1562661420182.png)]
    • Group id:主id,一般写包名的前缀
    • Artifact id:项目名
    • version:版本
    • packaging:jar——java项目、war——web项目

2.4 maven的项目结构

  • -src
    • –main
      • —java ——存放项目的.java文件
      • —resources ——存放项目资源文件,如spring、mybatis配置文件
    • –test
      • —java ——存放所有测试的.java文件
      • —resources ——测试的资源文件
  • -target ——目标文件输出位置,例如:class、.jar、.war文件
  • -pom.xml ——maven项目的核心配置文件

2.5 maven的命令

  • mvn compile
    • 完成编译操作,执行完毕后,会生成target目录,该目录下存放了编译后的字节码文件
  • mvn clean
    • 执行完成后,会清除target目录
  • mvn test
    • 完成测试操作,执行完毕后,会在target目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)
  • mvn package
    • 完成打包操作,执行完毕后,会在target目录生成一个文件,该文件为jar或者war
  • mvn install
    • 完成部署操作,执行完毕后,将打好的jar包安装到本地仓库,会在本地仓库中出现安装后的jar包,方便其他工程引用
  • mvn组合命令
    • mvn clean compile:清除后编译
    • mvn clean test:清除后测试
    • mvn clean package:清除后打包
    • mvn clean install:清除后部署

2.6 maven中引用另一个项目的操作

  • 现在有一个maven的简单项目test1,再新建一个maven简单项目test2

  • 如果要在test2项目中写个单元测试代码,调用test1的代码

  • 只需要再test2中添加test1项目的依赖项

    • 在pom.xml中添加项目所需要的jar包

    • <!-- 添加项目所需要的jar包,依赖 -->
      <dependcies>
      	<!-- 一个依赖代表一个jar -->
          <dependency>
          	<groupId>主Id</groupId>
              <artifactId>test1</artifactId>
              <version>test1的版本号</version>
          </dependency>
      </dependcies>
      

2.7 配置Maven插件

  • 可以通过pom.xml配置插件来使用jdk1.8版本进行编译

  • compile插件

  • <build>
    	<plugins>
    		<plugin>
    			<groupId>org.apache.maven.plugins</groupId>
    			<artifactId>maven-compiler-plugin</artifactId>
    			<configuration>
    				<source>1.8</source>
                    <target>1.8</target>
    				<encoding>UTF-8</encoding>
    			</configuration>
    		</plugin>
    	</plugins>
    </build>
    

2.8 Maven创建Web项目

  • packaging选择war包

  • 在webapp目录下,新建META-INF目录和WEB-INF目录。

  • 在WEB-INF项目下,新建web.xml

  • 在pom.xml下配置相关依赖包

  • 2.8.1 配置tomcat插件来运行web项目
    • 只配置启动配置:

      • 默认情况直接配置tomcat:run的话是tomcat6,只支持jdk1.7。
    • 增加tomcat插件:

      • 在pom.xml配置tomcat7插件,然后运行配置中的goals为tomcat7:run
      <build>
      	<plugins>
      		<plugin>
      			<groupId>org.apache.tomcat.maven</groupId>
      			<artifactId>tomcat7-maven-plugin</artifactId>
      			<configuration>
                      <!-- 端口号 -->
      				<port>8888</port>
                      <!-- 访问路径 -->
                      <path>/项目名</path>
      			</configuration>
      		</plugin>
      	</plugins>
      </build>
      
    • 本地tomcat运行:通过配置cargo插件来让maven使用本地的tomcat(极少使用)

      • 运行配置中的goals为cargo:start,在start之前需要先install
      <plugin> 
          <groupId>org.codehaus.cargo</groupId> 
          <artifactId>cargo-maven2-plugin</artifactId> 
          <version>1.2.4</version> 
          <configuration> 
              <container> 
                  <containerId>tomcat7x</containerId> 
                  <home>在本地的tomcat全路径</home> 
              </container> 
              <configuration> 
                  <type>existing</type> 
                  <home>在本地的tomcat全路径</home> 
                  <properties> 
                      <cargo.servlet.port>8888</cargo.servlet.port>
                  </properties> 
              </configuration> 
          </configuration> 
      </plugin> 
      
  • 2.8.2 直接使用eclipse中配置的本地tomcat来运行
    • run as->run on server即可

2.9 Maven的继承

  • 继承是为了消除重复,可以把很多相同的配置提取出来。例如:grouptld,version等

  • 2.9.1 创建父项目
    • 父项目的 packaging 必须为 pom
    • 在父项目配置的依赖,子项目可以继承使用
    • 父项目下只配置pom.xml让子项目来继承,一般情况下,不需要额外写代码
    • 父项目下统一管理依赖和版本号
  • 2.9.2 创建子项目
    • 在创建子项目的时候,需要配置好要使用的父项目的Group Id、Artifact Id和Version
    • 配置完后,在父项目添加的依赖,子项目可以直接继承使用
  • 2.9.3 父项目的版本号提取
    • 由于当父工程中定义的jar包越来越多,修改麻烦,因此把版本号提取成一个属性集中管理。

    • 在父工程的pom.xml中配置一个properties标签,里面的标签自己自定义即可

      <!-- 统一配置依赖版本号 -->
      <properties>
      	<junit.version>4.10</junit.version>
          <!-- 在dependency中的version下用${junit.version}来使用版本号 -->
      </properties>
      

2.10 聚合

  • 聚合一般是一个工程拆分成多个模块开发,每个模块是一个独立的工程,但是要是运行时必须把所有模块聚合到一起才是一个完整的工程,此时可以使用maven的聚合工程。

  • 例如电商项目中,包括商品模块、订单模块、用户模块等。就可以对不同的模块单独创建工程,最终在打包时,将不同的模块聚合到一起。

  • 例如同一个项目中的表现层、业务层、持久层,也可以分层创建不同的工程,最后打包运行时,再聚合到一起。

  • 2.10.1 创建聚合项目
    • 创建聚合项目时,聚合项目的packaging 一定要使用pom,Groupld和ArtifacelD根据项目来写。
    • 如果子模块要使用到共同的依赖包,直接在该项目下添加dependency
    • 使用该项目进行install打包,会将各个模块按顺序进行打包
  • 2.10.2 创建model模块(POJO)
    • 记录该模块的dependency
  • 2.10.2 创建Dao模块(数据访问层)
    • 在eclipse下,创建模块时,要使用Maven Module,注意Parent Project要选择先前创建的聚合项目
    • packaging为jar
    • 添加model模块的dependency后,可以使用model模块中的类了
    • 记录该模块的dependency
  • 2.10.3 创建Service模块(业务处理层)
    • 在eclipse下,创建模块时,要使用Maven Module,注意Parent Project要选择先前创建的聚合项目
    • packaging为jar
    • 添加model模块、Dao模块的dependency,就可以使用他的类与方法了
  • 2.10.4 创建Web模块
    • 在eclipse下,创建模块时,要使用Maven Module,注意Parent Project要选择先前创建的聚合项目
    • 注意,packaging此时为war
    • 添加Model模块、Dao模块、service模块的dependency
  • 2.10.6 运行聚合项目
    • 在Web模块中的pom.xml中配置tomcat插件(前前文),然后配置run configurations的tomcat7:run
  • 2.10.9 发布聚合项目
    • 由于Web模块使用到了全部代码,有了所有模块的jar包,因此将Web模块下的war包丢入服务器即可

三、Maven的核心概念

3.1 坐标

  • 在maven中,坐标就是为了定位一个唯一确定的jar包
  • Maven坐标的组成(GAV)
    • groupid:定义当前maven组织名称
    • artifactid:定义实际项目名称
    • version:定义当前项目的当前版本

3.2 坐标的查找

3.3 依赖管理

  • 3.3.1 scope依赖范围
依赖范围(Scope)对于主代码classpath有效对于测试代码classpath有效被打包,对于运行时classpath有效例子
compileYYYlog4j
test-Y-junit
providedYY-servlet-api
runtime--YJDBC Driver Implementation
  • 其中依赖范围用来控制依赖和编译,测试,运行的classpath的关系,主要的是三种依赖关系如下:

    • compile:默认编译依赖范围。对于编译,测试,运行三种classpath都有效。
    • test:测试依赖范围。只对于测试classpath有效。
    • provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为容器已经提供,例如servlet-api
    • runtime:运行时提供。例如jdbc驱动
  • 3.3.2 依赖传递
    • 直接依赖和间接依赖
      • 例如 test2 依赖 test1,test3 依赖 test2。其中test2直接依赖test1,test3间接依赖test1
    • 当第二依赖的范围时compile的时候,依赖可以传递
    • 当第二直接依赖的范围时test的时候,依赖不会得到传递
  • 3.3.3 依赖冲突
    • 假如 test1 使用 junit4.10依赖,并且scope为compile,那么test2、test3都可以使用test1的junit4.10,依赖传递下去了
    • 假如test2 使用junit4.9依赖,那么test3就会使用就近的一个依赖,也就是junit4.9
  • 3.3.4 可选依赖
    • dependency标签下的<optional>true/false</optional>表示是否可选,可以理解程是否向下传递
      • true:可选,不向下传递
      • false:默认值,不可选,向下传递
  • 3.3.5 排除依赖
    • exclusions可用于排除依赖。它写在<dependency>标签下

      <dependcies>
          <dependency>
          	<groupId>主Id</groupId>
              <artifactId>test2</artifactId>
              <version>test1的版本号</version>
              <!-- 排除test2中的test1依赖 -->
              <exclusions>
              	<exclusion>
                  	<groupId>主id</groupId>
                      <artifactId>test1</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>
      </dependcies>
      

3.4 Maven的声明周期(稍微了解即可)

  • Maven生命周期就是为了对所有的构建过程进行抽象和统一。

  • 包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。

  • 生命周期可以理解为构建工程的步骤。

  • 在Maven中有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

    • Clean Lifecycle:在进行真正的构建之前进行一些清理工作。
    • Default Lifecycle:构建的核心部分,编译,测试,打包,部署等等。
    • Site Lifecycle:生成项目报告,站点,发布站点。
  • 3.4.1 Clean生命周期:清理项目
    • Clean 生命周期一共包含了三个阶段:
      • pre-clean 执行一些需要在clean之前完成的工作
      • clean移除所有上一次构建生成的文件
      • post-clean执行一些需要在clean之后立刻完成的工作
    • mvn clean等同于 mvn pre-clean clean
    • 如果我们运行mvn post-clean,那么pre-clean,clean都会被运行。
    • 这是Maven很重要的一个规则,可以大大简化命令行的输入。
  • 3.4.2 Default生命周期:构造项目
    • Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。

    • validate
      generate-sources
      process-sources
      generate-resources
      process-resources	复制并处理资源文件,至目标目录,准备打包。
      compile	编译项目的源代码。
      process-classes 
      generate-test-sources 
      process-test-sources 
      generate-test-resources 
      process-test-resources	复制并处理资源文件,至目标测试目录。
      test-compile	编译测试源代码。
      process-test-classes 
      test 	使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
      prepare-package 
      package	接受编译好的代码,打包成可发布的格式,如JAR。
      pre-integration-test 
      integration-test
      post-integration-test 
      verify 
      install 将包安装至本地仓库,以让其它项目依赖。
      deploy 	将最终的包复制到远程的仓库,以让其它开发人员与项目共享
      
    • 运行任何一个阶段的时候,它前面的所有阶段都会被运行

    • 因此运行mvn install的时候,代码会被编译,测试,打包,安装到本地仓库

    • 此外,Maven的插件机制是完全依赖Maven的生命周期的。

  • 3.4.3 Sit生命周期:生成项目站点
    • 这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能

    • pre-site	执行一些需要在生成站点文档之前完成的工作
      site		生成项目的站点文档
      post-site	执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
      site-deploy 将生成的站点文档部署到特定的服务器上
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值