目前掌握的技术
目前的技术在开发中存在的问题
-
一个项目就是一个工程
- 如果项目非常庞大,就不适合继续使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。
- 借助于Maven就可以将一个项目拆分成多个工程。
-
项目中需要的jar包必须手动”复制”、”粘贴” 到WEB-INF/lib目录下
- 带来的问题是:同样的jar包文件重复出现在不同的项目工程中, 一方面浪费存储空间,另外也让工程.
比较臃肿。 - 借助Maven ,可以将jar包仅仅保存在“仓库”中,有需要使用的工程"引用”这个文件接口,并不需.
要真的把jar包复制过来。
- 带来的问题是:同样的jar包文件重复出现在不同的项目工程中, 一方面浪费存储空间,另外也让工程.
-
jar包需要别人替我们准备好,或到官网下载
-
不同技术的官网提供jar包下载的形式是五花八门的,有些技术的官网就是通过Maven或SVN等专门的工具来提供下载的。
-
如果是以不规范的方式下载的jar包,那么其中的内容很可能也是不规范的。
-
借助于Maven可以以一种规范的方式下载jar包。因为所有知名框架或第三方工具的jar包以及按照统一的规范存放在了Maven的中央仓库中。
-
以规范的方式下载的jar包,内容也是可靠的。
Tips : "统一的规范"不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。
-
-
一个jar包依赖的其他jar包需要自己手动加入到项目中
FileUpload组件→IO组件。 commons-fileupload-1.3.jar依赖于commons-io-2.0.1jar
如果所有jar包之间的依赖关系都需要程序员自己非常清楚的了解,那么就会极大的增加学习成本,Maven会自动将被依赖的jar包导入进来。
什么是Maven
定义: Maven是一个项目管理工具,它包含了一个项目对象模型(POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
-
Maven是一款服务于Java平台的自动化构建工具。
Make→Ant→Maven→Gradle
-
构建
- 概念:以"Java源文件”、"框架配置文件” 、"JSP” 、“HTML” 、“图片” 等资源为"原材料”, 去“生产”一个可以运行的项目的过程。
- 编译
- 部署
- 搭建
- 编译: Java源文件[Userjava]→编译→Class字节码文件[User.class]→交给JVM去执行
- 一个B/S项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”
- 概念:以"Java源文件”、"框架配置文件” 、"JSP” 、“HTML” 、“图片” 等资源为"原材料”, 去“生产”一个可以运行的项目的过程。
-
构建过程中的各个环节
- 清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
- 编译:将Java源程序编程成class字节码文件
- 测试:自动测试,自动调用junit程序
- 报告:测试程序执行的结果
- 打包:动态Web.工程打war包, Java工程打jar包
- 安装:Maven特定的概念一将打包得到的文件复制到 "仓库”中的指定位置
- 部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
-
自动化构建
省略中间编译→打包→部署→测试的重复步骤
Maven的优点
-
简化构建过程
虽然使用 Maven 时偶尔也需要你对底层细节有所了解!但是,Maven 确实屏蔽了很多细节,它已经大大简化了开发人员的工作
-
提供统一的构建系统
Maven 使用项目对象模型(POM)和一组所有项目共享的插件来构建项目,从而提供统一的构建系统。开发人员使用 Maven 构建项目的话,后期维护项目会节省大量时间
-
提供优质的项目信息
Maven 提供了大量有用的项目信息,这些信息部分来自您的POM,部分来自项目源。
-
提供最佳实践开发指南
Maven 会汇总当前最佳开发实践的原则,并通过 Maven 影响其他项目
Maven还旨在工作流程中协助项目开发,如发布管理和问题跟踪
-
允许透明迁移到新功能
Maven 为 Maven 客户端提供了一种安装更新的简单方法,开发人员可以简单便捷的利用 Maven 的最新特性
从第三方或 Maven 安装新的插件变得非常的简单
总之,Maven 为我们屏蔽了很多细节。有了 Maven 开发人员的工作就没有那么艰难和繁琐了
Maven如何部署
这段略过了百度就好了
记得idea的设置也要配好
Maven的核心概念
- 约定的目录结构
- POM
- 坐标
- 依赖
- 仓库
- 生命周期、插件、目标
- 继承
- 聚合
第一个Maven工程
-
创建约定的目录结构
- 根目录:工程名
- src目录:源码
- pom.xml文件: Maven工程的核心配置文件
- main目录:存放主程序
- test目录:存放测试程序
- java目录:存放Java源文件
- resources目录:存放框架或其他工具的配置文件
-
为什么要遵守约定的目录结构?
-
Maven要负责我们这个项目的自动化构建,以编译为例, Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。
-
如果我们自己自定义的东西想要让框架或工具知道,有两种办法
-
以配置的方式明确告诉框架
<param-value>classpath:springmvc.xml</param-value>
-
遵守框架内部已经存在的约定
log4j.properties
-
-
常用Maven命令
-
注意:执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。
与构建过程相关:编译、测试、打包、…
-
常用命令
- mvd clean :清理
- mvn compile :编译主程序
- mvn test-compile :编译测试程序
- mvn test :执行测试
- mvn package :打包
关于联网问题
- Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身
并不包含在Maven的核心程序中。 - 当我们执行的Maven命令需要用到某些插件时, Maven核心程序会首先到本地仓库中查找。
- 本地仓库的默认位置: Users[当前登录系统的用户名]\ .m2\repository
- Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。
- 如果此时无法连接外网,则构建失败。
- 修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
- 找到Maven解压目录\conf\settings.xml
- 在settings.xml文件中找到localRepository标签
- 将
<localRepository>/path/to/local/repo</localRepository>
从注释中取出 - 将标签体内容修改为已经准备好的Maven仓库目录
POM
含义: Project Object Model项目对象模型
DOM Document Object Model文档对象模型
pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。重要程度相当于web.xml对于动态Web工程
坐标
数学中的坐标:
- 在平面上,使用X、Y两个向量可以唯一的定位平面中的任何一 个点。
- 在空间中,使用X、Y、Z三个向量可以唯一的定位空间中的任何于个点。
Maven的坐标
- 使用下面三个向量在仓库中唯一定位一个Maven工程
groupId:公司或组织域名倒序+项目名
<groupId>com.jin</groupId>
artifactId:模块名
<artifactId>aispringboot</artifactId>
version:版本
<version>1.0-SNAPSHOT</version> //SNAPSHOT是快照的意思,是不稳定的,对应的是RELEASE,稳定的
Maven工程的坐标与仓库中路径的对应关系
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
等同
D:\Program Files\Maven\repository\org\springframework\boot\spring-boot-starter-parent\2.2.6.RELEASE
仓库
- 仓库的分类
- 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
- 远程仓库
- 私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
- 中央仓库:架设在Internet上,为全世界所有Maven工程服务
- 中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度
- 仓库中保存的内容: Maven工程
- Maven自身所需要的插件
- 第三方框架或工具的jar包
- 我们自己开发的Maven工程