1.web项目开发的基础结构

 

 

 

2.为什么要maven

  一、有利于分配任务,把大项目分成小项目,一个项目就是一个工程
    如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个项目,利于分工协作。
      借助于maven就可以将一个项目拆分成多个工程。

  二、lib目录是存jar包的,以前是下载手动复制粘贴,有了maven就可以自动导入。

  例如:

  <dependencies>
         <dependency>
            <groupId>com.companyname.groupname</groupId>
            <artifactId>App-Data-lib</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>

 

  三、现在的大框架基本都放在了maven仓库中,打个比喻就是我们需要一个东西,直接去maven中心搬运就可以了,不要再找来找去。

  四、jar包之间的关系是很复杂的,一个jar可以依赖另一个jar,通过maven我们不需要了解这些关系,直接配置就可以了。

3.maven构建的意思

  tips:现在比较流行maven,idea中的gradle也是构建工具。

  构建:就是以我们编写的Java代码、框架配置文件、国际化等其他资源文件、jsp页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。

  在实际开发中,我们的idea实际上已经帮我们做了很多工作,比如你写好一个项目,直接运行,其实就进行了编译。

  构建的实际过程包含了:编译---部署

      编译:例如我们写的java文件,运行时就要先编译成class类

      部署:构建web工程中,我们需要打包成war,springboot可以直接打包成jar。我们在服务器运行时最终运行的是项目构建的结果,而不是你编写的项目

  maven构建以后的对应关系

  实际你写代码的时候肯定是

  

 

  但如上述路径中没有webContent,就是因为编译部署的原因。对应图如下。

  

 

   我们运行的是编译结果,而不是项目,编译结果的classes是由src编译来的,最终到web-inf中去了。

  所以我们在src中写路径是就要注意了。附赠一篇讲的很好的博客https://www.cnblogs.com/story-xc/p/10835081.html

  

  maven运行时使用jar包的方法是引用,也就是你通过配置xml文件下载的,项目运行时,maven会去本地仓库找,找到不下载。找不到就下载,而不同的项目可以在引用同一个jar

  而不用每个项目都粘贴复制一套。

4.maven中心环节

构建过程中的几个主要环节
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将Java源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:将每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对象war包。
⑥安装:在Maven环境下特指将打包的结果——Jar包或War包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

5.maven安装

 翻还原安装环境那个的博客有写。现在的idea中基本都内置maven插件,但是不建议用,我喜欢在cmd运行maven命令,当然还有其他的原因。

6.maven核心概念

  1. 约定的目录结构
  2. POM
  3. 坐标
  4. 依赖
  5. 仓库
  6. 生命周期/插件/目标
  7. 继承
  8. 聚合

7.约定的目录结构:

  maven也不是万能的,也要按照一定的规章制度使用,按照它的规则maven才能找到你的文件,并且进行管理,当然你也可以自定义

  maven的目录结构如下

  

 

 

   自定义在xml文件中使用这个参数自定义:

  

 

 

   xml解析

  

 

 

 8.maven常用命令


    注意:执行与构建过程相关的Maven命令,必须进入pom.xml 所在的目录,项目在命令行编译比在编译器里快。
    常用命令
    【1】mvn clean : 清理,如果该项目你以前编译过,再次编译需要先清理class等编译文件
    【2】mvn compile : 编译主程序,本地没jar包可能会下载jar包,你也可以更改maven的jar的下载后的存储地址,具体见还原环境那篇文章
    【3】mvn test-compile : 编译测试程序
    【4】mvn test : 执行测试
    【5】mvn package : 打包
    【6】mvn install : 安装
    【7】mvn site :生成站点

  maven install:

  在我们了解了别人的依赖怎么用,我们自己打的war和jar包怎么使用的,同样也是加pom依赖,利用坐标

  在我们加完以后,发现找不到,这怎么回事啊?

  因为我们的war或者jar没有进行install,千万不要自己按照路径在自己仓库建立一个,然后拷贝jar包,没用。

  不进行maven install,就不会生成一系列的文件让maven找到它


9.pom文件

含义:Project Object Model 项目对象模型
DOM :Document Object Model 文档对象模型

pom.xml 对于 Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。
重要程度相当于web.xml 对于动态web工程

10.坐标

  怎么在maven工程中唯一定义一个项目?  

  需要三个:1.groupid--一般是公司域名+项目名

       2.artifactid--模块名

       3.version--版本名

  例如下个依赖就是找的com.companyname.groupname下的App-Data-lib模块的1.0版本

  <dependencies>
         <dependency>
            <groupId>com.companyname.groupname</groupId>
            <artifactId>App-Data-lib</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>

  version后面有时候会有后缀
  这个意思是快照,不稳定版本
  0.0.1-release版本基本是非常好的了,下载要找release

11.仓库分类

 


   镜像存在的原因就是为了方便下载,访问外网很慢。

12.依赖范围

 你既然有了依赖的jar包,但是对于不同场景,有些依赖是不用的,比如test的依赖在开发中可能没什么用处

  所以pom.XML中就有了<scope>这个

  <scope>分为三个compile,test,provided

  1.compile

  

 

 

 

  2.test范围依赖
  》对主程序是否有效:无效
  》对测试程序是否有效:有效
  》是否参与打包:不参与
  》是否参与部署:不参与
  》典型例子:Junit

 

  3.provided

  》对主程序是否有效:有效   
  》对测试程序是否有效:有效
  》是否参与打包:不参与
  》是否参与部署:不参与
  》典型例子:Servlet-api.jar

13.maven传递依赖

  A依赖B,B依赖C,A能否使用C呢?要看B依赖C的范围是不是compile

  

 

 

   

  配置方式:

 

<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<exclusions>
    < exclusion>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
    </ exclusion> 
</exclusions>
</dependency>

14 maven生命周期。

  各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
  Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
  Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中各个阶段:不论现在要执行生命周期中的哪一阶段,都是从这个生命周期最初的位置开始执行。

  Maven有三套相互独立的生命周期,分别是:
  ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  ②Default Lifecycle 构建的核心部分,编译、测试、打包、安装、部署等等。
  ③Site Lifecycle 生成项目报告,站点,发布站点。

  他们相互独立。也可以直接运行 mvn clean install site 运行所有这三套生命周期。

  每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有     Clean 生命周期,也有 clean 阶段。

  Clean声明周期
  ①pre-clean 执行一些需要在clean之前完成的工作
  ②clean 移除所有上一次构建生成的文件
  ③post-clean 执行一些需要在clean 之后立刻完成的工作

  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 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

  Site生命周期
  ①pre-site 执行一些需要在生成站点文档之前完成的工作
  ②site 生成项目的站点文档
  ③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  ④site-deploy 将生成的站点文档部署到特定的服务器上

  这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。

  插件和目标
  Maven的核心仅仅定义了抽象的声明周期,具体的任务都是交由插件完成的。
  每个插件都实现多个功能,每个功能就是一个插件目标
  Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
  可以将目标看做“调用插件功能的命令”

  例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。
 

个人觉得生命周期了解一下就行了,明白上述maven命令需要按顺序,若跳着执行B名,则B命令之前的命令一定会执行以后才执行B。

 

15.继承


    现状
    Hello依赖的Junit:4.0
    HelloFriend依赖的Junit:4.0
    MakeFriends依赖的Junit:4.9

    由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。

    需求:统一管理各个模块工程中对Junit依赖的版本。

    解决思路:将Junit依赖统一提取到“父”工程中,在子工程中声明Junit依赖是不指定版本,以父工程中统一设定的为准。同时也便于修改。

    操作步骤:
    ①创建一个Maven工程作为父工程。注意:打包方式为pom
   

 


    ②在子工程中声明对父工程的引用
   

 


    ③将子工程的坐标中与父工程坐标中重复的内容删除
   

 


    ④在父工程中统一管理Junit的依赖
   

 


    ⑤在子工程中删除Junit依赖的版本号部分
   

 

 



注意:配置集成后,执行安装命令时要先安装父工程。

16、聚合

  聚合和继承不一样。继承是子继承父,而聚合是把子工程放在一个大框里,只是划了圈儿

  聚合的好处是你在安装时不用一个一个子项目安装了,直接安装聚合的工程

  配置方法

  

 

  安装方法

  

17、Maven 酷站

我们可以到 http://mvnrepository.com/搜索需要的 jar 包的依赖信息。

 

 本文仅用于作者记笔记,如有侵权,必删。笔记都来自黑马,和一个博主的记录,非常感谢

https://blog.csdn.net/zxm1306192988/article/details/76209062

 

posted on 2020-02-10 10:55  纯正肉包  阅读(177)  评论(0编辑  收藏  举报