玩命加载中 . . .

Maven


Maven

概念:Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件

  • 是一个基于Java平台的 自动化构建工具 make-ant-maven-gradle
  • 自动化构建工具maven:将 原材料(java、js、css、html、图片)->产品(可发布项目)
  • 编译-打包-部署-测试 –> 自动构建

作用:

  1. 增加第三方Jar包
  2. jar包之间的依赖关系 (自动关联下载所有依赖的Jar,并且不会冲突)
    • 依赖:A中的某些类 需要使用B中的某些类,则称为A依赖于B
    • 在maven项目中,如果要使用 一个当时不存在的Jar或模块,则可以通过 依赖实现(去本地仓库、中央仓库去寻找)
  3. 将项目拆分成若干个模块

实现的功能:

  • 清理:删除编译的结果,为重新编译做准备。
    编译:java->class
    测试: 针对于 项目中的关键点进行测试,亦可用 项目中的测试代码 去测试开发代码;
    报告:将测试的结果 进行显示
    打包: 将项目中包含的多个文件 压缩成一个文件, 用于安装或部署。 (java项目-jar、web项目-war)
    安装:将打成的包 放到 本地仓库,供其他项目使用。
    部署:将打成的包 放到 服务器上准备运行。
    --将java、js、jsp等各个文件 进行筛选、组装,变成一个 可以直接运行的项目
    
    • 手动部署方式:
      • 通过Eclipse中Add and Remove按钮进行部署
      • 将Web项目打成一个war包,然后将该war包复制到tomcat/webapps中 即可执行运行

下载配置:

  1. 下载maven: http://archive.apache.org/dist/maven/maven-3/
  2. 配置JAVA_HOME(maven是基于java的工具)
  3. 配置MAVEN_HOME/M2_HOME : D:\apache-maven-3.5.3
  4. 配置path :%MAVEN_HOME%\bin
  5. 验证 :mvn -v
  6. 配置本地仓库 maven目录/conf/settings.xml
    • 默认本地仓库 :C:/Users/YANQUN/.m2/repository
    • 修改本地仓库: D:/mvnrep

使用maven

  • 约定 优于 配置(约定:使用默认值)

  • maven约定的目录结构:

    • src
      • main:程序功能代码
        • java:java代码
        • resources:资源代码、配置代码
      • test:测试代码
        • java
        • resources
    • pom.xml
    pom.xml:
    gav:用于在本地仓库中定位
        <groupId>域名翻转.大项目名</groupId>
        <groupId>org.lanqiao.maven</groupId>
    
        <artifactId>子模块名</artifactId>
        <artifactId>HelloWorld</artifactId>
    
        <version>版本号</version>
        <version>0.0.1-SNAPSHOT</version>
    

maven常见命令(必须在pom.xml所在目录中执行)

(第一次执行命令时,因为需要下载执行该命令的基础环境,所以会从中央仓库下载该环境到本地仓库)

  1. mvn compile 编译–只编译main目录中的java文件
  2. mvn test 测试
  3. mvn package 打包jar/war
  4. mvn install 将开发的模块 放入本地仓库,供其他模块使用 (放入的位置 是通过gav决定)
  5. mvn clean 删除target目录(删除编译文件的目录)

依赖:

jar包依赖:

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
</dependency>

* version动态化(统一版本):
1.    <properties>
        <lanqiao.World.junit.version>4.0</lanqiao.World.junit.version>
    </properties>
2.<version>${lanqiao.World.junit.version}</version>

工程依赖:

<dependency>
    <groupId>cn.hm</groupId>
    <artifactId>maven_dao</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
  • scope:依赖范围,依赖的有效性

    • compile(默认) :在编译、部署(运行)可以获得该依赖
    • test:在测试可以获得该依赖
    • provided:在编译、测试可以获得该依赖
  • 依赖排除

    A.jar ->B.jar 当我们通过maven引入A.jar时,会自动引入B.jar,不引入:排除依赖

            <!-- 排除依赖 beans -->
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                            <artifactId>spring-beans</artifactId>
                    </exclusion>
                </exclusions>
    
  • 依赖的传递性

    ​ A.jar-B.jar->C.jar

    ​ 要使 A.jar ->C.jar:当且仅当 B.jar 依赖于C.jar的范围是compile

  • 依赖原则:为了防止冲突

    • 路径最短优先原则(手动声明>间接引入)

    • 路径长度相同:

      • (一个模块)在同一个pom.xml文件中有2个相同的依赖(覆盖):后面声明的依赖 会覆盖前面声明的依赖 (严禁使用本情况,严禁在同一个pom中声明2个版本不同的依赖)
      • (两个模块)如果是不同的 pom.xml中有2个相同的依赖(优先):则先声明的依赖 ,会覆盖后声明的依赖
    • 版本锁定:使用dependencyManagement标签,将其包版本锁定,作用只是锁定,并不会引入jar包,如果需要直接引入Jar包依赖即可,不再需要版本号

      <!--版本锁定-->
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>spring-beans</artifactId>
                  <version>4.12</version>
              </dependency>
          </dependencies>
      </dependencyManagement>
      <!--引入坐标,不需要版本号-->
      <dependencies>
          <dependency>
                  <groupId>junit</groupId>
                  <artifactId>spring-beans</artifactId>
              </dependency>
      </dependencies>
      
  • 多个maven项目(模块)之间如何 依赖: p项目 依赖于 –> q项目

    1. q项 目 install 到本地仓库

    2. p项目 依赖:

              <!-- 本项目  依赖于HelloWorld2项目 -->
                <dependency>
                     <groupId>org.lanqiao.maven</groupId>
                    <artifactId>HelloWorld2</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </dependency>
      

聚合:

  • 使用:

    • 在一个总(父)工程中配置聚合(pom.xml)

      <modules>
                <!--项目在本地仓库的根路径  -->
              <module>../Maven1</module>(不分顺序,maven会自行判断)
              <module>../Maven2</module>      
      </modules>
      
    • 以后只需要操作总工程即可操作聚合中的工程

    • Maven将一个大工程拆分成 若干个子工程(子模块)
      聚合可以将拆分的多个子工程 合起来


在Eclipse中创建maven工程:

  1. 创建maven工程:new Maven Project –> 第一个勾选上 –> g大项目a项目名v版本填写(项目在本地仓库的定位)

    • 打包方式:
      java工程——jar
      web项目-war
      父工程-pom
  2. 在Eclipse中配置maven

    • 配置maven版本:Window –> Preferences –> Installations –> add(找maven安装目录)
    • 配置本地仓库 : 设置settings.xml(Window –> Preferences –> User Settings –>Browser(找settings.xml))
    • 在pom.xml中编写依赖,编写后需要更新maven:maven-update project
    • 执行命令:右键pom.xml –> Run As –> Maven Build … —>Goals:写命令(test/compile…)
  3. maven生命周期:

    • 生命周期和构建的关系:

      生命周期中的顺序:a b c d e 
        当我们执行c命令,则实际执行的是 a b c 
      
    • 生命周期包含的阶段:3个阶段

      • clean lifecycle :清理

        pre-clean  clean  post-clearn
        
      • default lifecycle :默认(常用)

      • site lifecycle:站点

        pre-site   site   post-site site-deploy
        
  4. 修改项目的jdk:

    • build path:删除旧版本,增加新版本

    • 右键项目-属性-Project Factors -java version 改版本 (之前存在要改的版本)

    • 通过maven统一jdk版本:

      pom.xml
      <profiles>
          <profile>  
              <id>jdk-18</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>  
       </profiles>
      

在Idea中创建maven工程:

image-20200513175044486

web项目部署到Tomcat服务器

  • image-20200514231320783
  • image-20200514231539778

maven项目结构

  • image-20200514231942559
  • 创建子模块image-20200514232323293
  • image-20200514232617772

继承实现步骤:(用于统一jar包版本)

  1. .建立父工程: 父工程的打包方式必须为pom

    <groupId>org.lanqiao.maven</groupId>
    <artifactId>B</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    
  2. 在父工程的pom.xml中编写依赖:

    通常父工程不导入Jar包,只进行版本锁定,子工程直接导入jar包即可

    <dependencyManagement>
          <dependencies>
              <dependency>
    
  3. 子类:

    <!-- 给当前工程 继承一个父工程:
    1.加入父工程坐标gav   
    2.当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径  -->
          <parent>
              <!-- 1加入父工程坐标gav -->
                <groupId>org.lanqiao.maven</groupId>
              <artifactId>B</artifactId>
              <version>0.0.1-SNAPSHOT</version>
             <!-- 2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径,该标签可省 --> 
              <relativePath>../B/pom.xml</relativePath>
          </parent>
    
  4. 在子类中 需要声明 :使用父类的哪些依赖

    <dependency>
    <!-- 声明:需要使用到父类的junit (只需要ga) -->
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    

部署Web工程:war

  • 实际开发中,开发人员 将自己的项目开发完毕后 打成war包(package) 交给实施人员去部署

  • 通过maven直接部署运行web项目(了解):

    1. 在pom.xml中配置cargo
    2. maven命令发布:deploy

Maven工程创建web项目

  1. 不使用骨架创建普通项目

  2. 选择工程

img

  1. 增加webapp

img

4.打成War包

war

分模块开发maven工程

  1. 构建工程

    1. 创建父工程

      <packaging>pom</packaging>
      
    2. 创建子工程,继承于父工程

            <parent>
                <!-- 1加入父工程坐标gav -->
                  <groupId>org.lanqiao.maven</groupId>
                <artifactId>B</artifactId>
                <version>0.0.1-SNAPSHOT</version>
               <!-- 2当前工程的Pom.xml到父工程的Pom.xml之间的 相对路径,该标签可省 --> 
                <relativePath>../B/pom.xml</relativePath>
            </parent>
      
    3. 在父工程中,聚合所有子工程

      <modules>
                <!--项目在本地仓库的根路径  -->
              <module>../Maven1</module>(不分顺序,maven会自行判断)
              <module>../Maven2</module>      
      </modules>
      
    4. 在父工程中,进行版本锁定

      <dependencyManagement>
            <dependencies>
                <dependency>
      
    5. 子工程导入jar包,子工程相互依赖

      <dependency>
          <groupId>cn.hm</groupId>
          <artifactId>maven_dao</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>
      
  2. 完善代码

    将每个部分的代码完善,需要引入Jar包的在子工程引入

  3. 部署到tomcat

    如:SSM中,父工程中有子工程:pojo、dao、service、web

    其中父工程是pom打包方式,web是war包方式,其他为jar包方式

    部署tomcat的是web子工程


文章作者: 小苏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小苏 !
评论
  目录