6. Maven学习笔记

  1. Maven简介
    Maven是Apache下的开源项目,项目管理工具,管理Java项目。
    1.1. 项目对象模型(Project Object Model)
    POM对象模型, 每个maven工程中都有一个pom.xml文件, 定义工程所依赖的jar包、本工程的坐标、打包运行方式。
    1.2. 依赖管理系统(基础核心)
    maven通过坐标对项目工程所依赖的jar包统一规范管理
    1.3. maven定义一套项目的生命周期
    清理、初始化、编译、测试、报告、打包、部署、站点生成
    1.4. maven管理项目生命周期过程都是基于插件完成的
    1.5. 一组标准集合
    强调:maven工程有自己标准的工作目录结构、定义坐标有标准
  2. Maven 仓库
    2.1. 中央仓库
    包含日常开发所常用的jar包,有专业团队(maven团队)统一维护。
    中央仓库地址:http://repo1.maven.org/maven2/
    2.2. 本地仓库
    相当于缓存,工程第一次会从远程仓库(互联网)去下载jar包,将jar包存在本地仓库,第二次不需要从远程仓库下载,先从本地仓库找,如果找不到才会去远程仓库查找。
    2.3. 私服
  3. Maven环境搭建
    3.1. Maven下载
    http://maven.apache.org/download.cgi
    3.2. 配置本地仓库
    打开maven的安装目录中conf/setting.xml文件,配置D:\apache-maven-3.5.4\local_repository
  4. eclipse(IntelliJ IDEA)配置maven
    4.1. 配置安装目录
    Window --> Preferences --> Maven --> Installations --> add 添加maven的安装目录位置
    4.2. 配置配置文件
    Window --> Preferences --> Maven --> User Settings --> Browse添加配置文件路径
    4.3. 显示Maven Repositories
    Window --> Show View --> Other --> Maven --> Maven Repositories
    4.4. 重建Maven Repositories 索引
    选中 Local Repository 右键 --> Rebuild Index
  5. 创建一个Maven工程
    5.1. 创建Maven工程–> 勾选Create a simple project (skip archetype selection) --> 填写工程坐标 --> finish
    5.2. 工程坐标包括
    Group Id : 项目的名称, 项目的名称以域名倒序,比如: cn.xiaofan.mavendemo
    Arficatc Id : 模块名称(子项目名称)
    Version : 模块的版本, snapshot(快照版,没有正式发行)release(正式发行版本)
  6. 设置编译版本
    6.1. Maven 工程默认是JDK1.5, 需要将编译版本进行修改
    6.2. 配置信息:



    org.apache.maven.plugins
    maven-compiler-plugin
    3.1

    1.8
    1.8




    6.3. 对项目进行刷新 Alt + F5
  7. 添加依赖
    7.1. 向导模式(本地仓库有相应的Jar包)
    右键工程 选Maven --> Add Dependency --> 搜索相应的依赖(前提是对本地仓库重建索引, 否则无法自动查询)
    7.2. 通过在Nexus Repository Manager 中搜索,然后添加到pom.xml文件中
    链接:https://repository.sonatype.org
  8. 项目生命周期(了解)
    Maven 有三套相互独立的生命周期, 分别是: clean、default、site。生命周期的每一个活动都对应着maven中的一条命令。
    8.1. clean 周期
    pre-clean: 准备清理
    clean:真正的清理工作
    post-clean: 执行清理后的一些后续工作
    8.2. default 周期

    compile: 编译源代码

    test:单元测试运行测试代码
    package:将编译好的代码打包成为jar或者war或者ear等等

    install:安装到本地maven仓库

    8.3. site 周期
    pre-site: 准备生成站点
    site:生成站点及文档
    post-site:站点收尾
    site-deploy:将生成的站点发布到服务器上
  9. eclipse中命令使用
    compile : 点击工程右键 --> run as --> Maven build… --> Goals中输入compile --> run
    clean : 点击工程右键 --> run as --> Maven clean
    test : 执行单元测试类, 执行src/test/java下的类
    package : 点击工程右键 --> run as --> Maven build… --> Goals中输入package --> run
    install : 将工程的jar发布到本地仓库 点击工程右键 --> run as --> Maven install
  10. maven原生命令
    mvn 命令名称 运行不调试
    mvnDebug 命令名称 调试运行
    前提:需要配置maven环境变量
    MAVEN_HOME D:\apache-maven-3.5.4
    PATH %MAVEN_HOME%\bin
  11. 关于Maven项目build时出现No compiler is provided in this environment的处理
    链接:https://blog.csdn.net/lslk9898/article/details/73836745

12 创建SSH2工程(*****)
12.1. 创建war工程
12.1.1. 在创建普通maven工程的基础上packaging类型选war,并且web.xml需要手动添加(先创建WEB-INF,在这下面创建web.xml)
12.1.2. 添加编译插件,设置编译版本,参照6
12.1.3. 添加tomcat插件,配置端口和路径


org.apache.tomcat.maven
tomcat7-maven-plugin
2.2

8080
/

12.1.4. 添加一个jsp文件,配置web.xml
12.1.5. 运行web服务器,并在客户端访问
点击工程右键 --> run as --> Maven build… --> Goals中输入tomcat7:run --> run
12.1.6. 在pom.xml中配置servlet-api
因为我们创建的是war工程,需要response和request等对象,而这些对象都在servlet-api中,所以只有添加servlet-api,才能正常编译通过

javax.servlet
servlet-api
2.5
provided

注意:因为tomcat插件本身会提供servlet-api插件,所以要添加这个provided 依赖范围,防止打包冲突
12.1.7. 打war包(参照9)
12.2. 添加依赖,定义变量,抽取相应的版本


4.0.0

cn.xiaofan.mavendemo
parent
0.0.1-SNAPSHOT

b

c中的pom.xml


4.0.0
cn.xiaofan.mavendemo
c
0.0.1-SNAPSHOT

  1. 构建多模块的Maven工程(*****)
    Maven多模块项目,使用与一些比较大的项目, 通过合理的模块拆分,实现代码的复用,便于维护和管理。 尤其是一些开源框架, 也是采用多模块的方式, 提供插件集成, 用户可以根据需要配置置顶的模块。
    14.1. 拆分规则
    14.1.1. 按照业务模块进行拆分 (企业资源计划即 ERP (Enterprise Resource Planning))
    父工程 --> 通用的配置
    基本信息模块
    进销存模块
    人事管理模块
    财务管理模块
    CRM模块
    14.1.2. 按层进行划分
    父工程 --> 通用的配置
    web层
    业务逻辑层
    数据访问层
    实体类
    注意: 1.对于比较超大的项目可以考虑二者集合
    2.对于父模块,一般packaging类型都选pom, 子模块一般packaging类型选择jar, war
    14.2. 模块之间的依赖具有传递性
    14.3. 配置文件的拆分,只需要在web.xml中配置applicationContext* 就可以找到!
    14.4. tomcat7:run 运行
    14.5. 打包 package(运行,打包都选父工程)
  2. 依赖管理
    15.1. 依赖范围
    依赖范围是用来控制依赖与3种classpath(编译classpath, 测试classpath, 运行classpath)的关系

依赖范围 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
compile Y Y Y spring-core
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
注:

  1. compile 编译、测试、运行, A在编译时依赖B, 并且在测试和运行时也依赖。strus-core、 spring-beans 打到war包或jar包里

  2. test 只在测试阶段有效,不会打到war包或者jar包里面 junit

  3. provided 编译、和测试有效,A在编译和测试时需要B.比如:servlet-api就是编译和测试有用, 在运行时不用(tomcat容器已经提供)不会打到war包

  4. 测试运行有效。比如jdbc驱动包
    15.2. 传递依赖规则
    直接依赖(A依赖B)\ 传递依赖(B依赖C) compile provided runtime test
    compile compile - runtime -
    provided provided provided provided -
    runtime runtime - runtime -
    test test - test -
    注:纵坐标代表A依赖B, 横坐标代表B依赖C, 其他代表A和C的依赖关系,-代表没有依赖关系。
    15.3. 依赖调解原则
    a . A --> B --> C(v1)
    b. A --> D --> E --> C(v2)
    c. A --> D --> C(v3)
    第一原则:路径优先,短的路径会被依赖(a, b, 两种路径,A最终会依赖C(v1)版本)
    第二原则:声明优先,路径深度相同的前提下,声明在前的会被引用C(v1)

  5. 版本锁定
    在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器
    pom.xml文件中, jar的版本判断的两种途径

  6. 如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过声明,如果有,就集它,如果没有就报错,告诉你必须为dependency声明一个version

  7. 如果dependencies中的dependency声明了version,那么无论denpendencyManagement中有误对该jar的version声明,都以denpendency里的为准。

  8. 排除依赖(版本就高不就低)

    org.apache.struts
    struts2-core
    ${struts.version}


    javassist
    javassist


  9. 单元测试
    18.1. 依赖junit

    junit
    junit
    4.11
    test

    18.2. 编写测试类
    public class TestErpDao {

    @Test
    public void testErpDao() {
    System.out.println(“测试Junit”);
    }
    }

发布了85 篇原创文章 · 获赞 12 · 访问量 3733

猜你喜欢

转载自blog.csdn.net/fanjianhai/article/details/103800226