1、背景
1.1 软件是一个工程
我们在日常生活常能听到工程这个词,像桥梁工程、道路工程、南水北调工程等等。
工程说简单点就是各个行业的从业人员通过总结规律或者方法,以最短的时间和人力、物力来做出高效可靠的东西。我们也就能理解桥梁工程,其实就是人们通过经验的总结和各种研究得出来的、用来修建桥梁时所采用的高效的方法,当然这种方法是可复用的。我们将这种作工程的思想应用到软件上,于是就产生了一软件工程。
软件工程:为了能够实现软件的流水线式生产,在设计和构建软件时能够有一种规范和工程化的方法,人们便提出了软件工程概念。
1.2 完成一个java项目,需要做的工作
(1)分析项目要做什么,知道项目有哪些组成部分。
(2)设计项目,通过哪些步骤,使用哪些技术.需要多少人,多长的时间.
(3)组建团队,招人, 购置设备,服务器, 软件,笔记本..
(4)开发人员写代码。开发人员需要测试自己写代码。重复多次的工作.
(5)测试人员,测试项目功能是否符合要求.测试开发人员提交代码-如果测试有问题-需要开发人员修改--再提交代码给测试--测试人员再测试代码-如果还有问题-再交给开发人员-开发人员再提交-再测试直到-测试代码通过. (多次重复的工作.)
1.3 在没有maven之前,开发一个java项目会遇到的问题
(1)很多模块,模块之间有关系, 手工管理关系,比较繁琐
(2)需要很多第三方功能,需要很多jar文件,需要手工从网络中获取各个jar
(3)需要管理jar的版本, 你需要的是mysgl .5.1.5.jar 那不能给一个mysql.4.0.jar
(4)管理jar文件之间的依赖, 你的项目要使用a.jar需要使用b.jar里面的类.必须首先获取到b.jar才可以,然后才能使用a.jar.
说明:a.jar需要b:jar这个关系叫做依赖, 或者你的项目中要使用mysql的驱动, 也可以叫做项目依赖mysql驱动。或者比如 a.class使用b.class, a依赖b类
1.4 为了改进项目的开发和管理,maven应运而生
maven可实现以下作用:
(1)maven可以管理jar文件
(2)自动下载jar和他的文档,源代码
(3)管理jar直接的依赖, a.jar需要b.jar , maven会自动下载b.jar
(4)管理你需要的jar版本
(5)编译程序,把Java编译为class (构建)
(6)测试代码是否正确. (构建)
(7)将你编写的类打包,形成jar文件,或者war文件 (构建)
(8)帮你部署项目 (构建)
总结:maven帮忙完成费时费力又麻烦的重复性工作,程序员就可以专心写功能型代码了。
2、maven 构建 项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等.maven支持的构建包括有:
(1)清理, 把之前项目编译的东西删除掉,为新的编译代码做准备。
(2)编译, 把程序源代码编译为执行代码, 批量将.Java文件变成.class文件, maven可以同时把成千上百的.java文件编译为.class.(传统的javac一次只能编译一个文件)
编译方法:maven工程所在的根目录下,启动cmd(直接windows文件目录那里输入cmd),然后输入命令 mvn compile
(3)测试, maven可以执行测试程序代码,验证你的功能是否正确。maven同时批量执行多个测试代码,同时测试很多功能(传统的测试一次只能测试一个类,那要测试多久才能测试完啊)
(4)报告, 生成测试结果的文件, 告知测试是否通过。
(5)打包, 把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件,通常Java程序,压缩文件是Jar扩展名的.对于web应用,压缩文件扩展名是.war
(6)安装, 把(5)中生成的文件jar, war安装到本机仓库中
(7)部署, 把程序安装好可以执行。 (一般不用maven部署)
说明:开发中主要做1-6,不用maven部署,maven部署更复杂
3、maven的安装和配置
(1)从maven的官网下载maven的安装包apache-maven-x.x.x-bin.zip
(2)解压安装包,解压到一个目录,非中文目录.
子目录bin :里面有maven执行程序,主要是mvn.cmd
子目录conf :里面有maven工具本身的配置文件settings .xml
(3)配置环境变量在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录,(bin之前的目录)
M2 HOME=安装目录 。再把M2_HOME加入到path之中,在所有路径之前加入%M2_HOME%\bin;4)验证,新的命令行中,执行mvn-v
4、maven 核心概念 (maven中的术语)
(1)POM Project Object Module 项目对象模型
一个文件名,名称是pom.xml,该文件控制maven构建项目的过程,管理jar依赖
(2)约定的目录结构
maven项目的目录和文件位置都是有规定的,不能随便乱放
(3)坐标(gav)
Maven把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一个Maven项目。
groupld:组织名,通常是公司或组织域名倒序+项目名
artifactld:模块名,通常是工程名
version:版本号
需要特别指出的是,项目在仓库中的位置是由坐标来决定的、groupld, artifactid和version决定项目在仓库中的路径(groupId对应的包路径/模块名/版本号/jar包), artifactid和version决定jar包的名称。
进入POM.xml文件,对坐标进行配置。
(4)依赖管理
用于管理项目中可以使用的jar文件
(5)仓库管理(了解即可)
资源存放的位置
(6)生命周期(了解即可)
maven构建项目的过程,就是生命周期。即完成清理、编译,测试,运行、打包等
(7)插件和目标(了解即可)
执行maven构建的相关命令时,比如清理,编译、打包等命令,实际是插件在运作。插件就是Maven的功能类。
(8)继承
和java继承类似,由父及子
(9)聚合
将多个项目汇总到一起
4.1、maven工程约定的目录结构
每一个maven项目在磁盘中都是一个文件夹(就相当于是IDEA项目的文件夹)
JAVA工程名 | |||||
src | |||||
main | |||||
java | 各种包 | 程序的包和包中的java文件 | |||
resources | java程序需要的配置文件 | ||||
test | 放置测试程序的代码和配置文件(如果要求测试,允许没有测试文件) | ||||