1. 软件是一个工程
没有使用maven管理的项目有一些问题
- 模块太多,要手工管理关系,比较繁琐
- 需要很多第三方功能,需要很多jar包,需要手动从网络中获取各个jar
- 需要管理jar的版本。
- 管理jar文件之间的依赖, 你的项目
2. 需要改进项目的开发和管理,需要maven
- maven可以管理jar文件
- 自动下载jar和他的文档,源代码
- 管理jar直接的依赖
- 帮你编译程序,把java编译为class
- 管理你需要的jar版本
- 帮你测试你的代码是否正确
- 帮你打包文件,形成jar文件,或者war文件
- 帮你部署项目
3. 项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行打包,部署等。
maven支持的构建包括有:
- 清理, 把之前项目编译的东西删除调,为新的编译代码做准备
- 编译, 把程序源代码编译为执行代码,java-class文件,批量的,maven可以同时把成千上百的文件编译为class。
- 测试, maven可以执行测试程序代码,验证你的功能是否正确。maven可以执行多个测试代码,同时测试很多功能。
- 报告, 生成测试结果文件,测试通过没有。
- 打包,把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。这个压缩文件就是项目的结果文件,通常java程序,压缩文件是jar扩展名的。对web应用,压缩文件扩展名是.war
4.maven的核心概念
1.POM:一个文件,名称叫pom.xml,项目对象模型。maven把一个项目当做一个模型使用。可以实现控制maven构建项目的过程,管理jar依赖。
2.约定的目录结构:maven项目的目录和文件的位置都是规定的。
3.坐标:是一个唯一的字符串,用来表示资源的。
4.依赖管理:管理你的项目可以使用jar文件。
5.仓库管理(了解):你的资源存放位置。
6.声明周期(了解):maven工具构建项目的过程。
7.插件和目标(了解):执行maven构建的时候用的工具是插件
8.继承
9.聚合
- maven工具的安装和配置
- 在官方下载。
- 解压安装包,解压到一个目录,非中文目录。
子目录 bin:执行程序,主要是mvn.cmd
conf:maven工具本身的配置文件 settings.xml- 配置环境变量:
在系统的环境中,指定一个M2-HOME的名称,指定它的值是maven工具的安装目录,bin之前的目录。
M2_HOME=D:\maven\apache-maven-3.6.3
添加path: %M2_HOME%\bin;- 验证,maven是否成功输入mvn -v(注意必须先把jdk配置好)
- Maven工程约定目录结构,大家都遵循的一个规则
每一个maven项目在磁盘中都是一个文件夹(项目-hello)
hello/
---/src
-------/main # 放主程序的java代码和配置文件
------------>java # 你的程序包和包中的java文件
------------>ressource # 你的java程序中要使用的配置文件
-------/test # 放测试程序代码和文件的(可以没有)
------------>java # 测试的程序包和包中的java文件
------------>ressource # 测试的java程序中要使用的配置文件
---/pom.xml #maven的核心文件(maven项目必须有)
- maven下载做了什么?
- maven工具执行的操作需要很多插件(java类--jar文件)完成的
- jar文件--叫做插件--插件是完成某些功能
- 下载到本机的默认地址(Administrator.m2\reponsitory)
执行mvn compile , 结果是在项目的根目录下生产target目录(.class文件)
- 修改本地存放资源仓库
修改maven的配置文件, maven安装目录/conf/settings.xml
- 先备份settings.xml
<localRepository>D:\maven\JAR</localRepository>: 配置本地资源仓库地址。
- 仓库
- 仓库是什么: 仓库是存放东西的, 存放maven使用的jar和我们项目使用的jar,已经我们使用的第三方jar
- 仓库的分类
本地仓库, 就是你的个人计算机的文件夹,存放各种jar。
远程仓库,在互联网上的,使用网络才能使用的仓库
(中央仓库:所有开发人员使用的一个集中的仓库)
(中央仓库的镜像:就是中央仓库的备份,在各大洲都有)
(私服:在公司内部,在局域网中使用的,不是对外使用的)- 仓库的使用, maven仓库的使用不需要人为参与
例:开发人员需要使用mysql驱动 ---> maven首先查本地仓库 --- 私服 --- 镜像 --- 中央仓库
- pom:项目的对象模型,☞pom.xml文件
坐标: groupId + artifactId + version = 坐标
坐标是唯一的。
https://mvnrepository.com/
搜索使用的中央仓库的资源
<groupId>公司域名倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>版本号</version>
- modelVersion:maven模型的版本
- groupId:表示组织名称,一般是公司的倒写。例:(com.baidu.appolo)
- artifactId:项目名称,对于groupId中的子项目
- version: 项目版本号 (-SNAPSHOT 表示不是稳定
版本,还在开发中)- packaging : 打包后的压缩文件默认是jar
- 依赖: dependencies和dependency
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.1.10.RELEASE</version> </dependency> </dependencies>- properties:是用来定义一些配置属性的。
- build:maven在进行项目构建时,配置信息,例如指定编译java代码使用的jdk的版本等等。
- maven的声明周期:
maven提供一个项目的构建模型,把编译、测试、打包、部署等都对应成一个个声明周期阶段。 - maven的常用命令:
maven可以独立使用,通过命令完成mavven的生命周期执行。
mvn clean: 清理target目录,但是已经install到仓库里的包不会删除。mvn compile: 编译主程序(在当前目录下生成target目录,里面存放编译测试程序之后生成的字节码文件)mvn test-compile: 编译测试程序(会生成一个目录surefire-reports,保存测试结果)mvn package:打包主程序(把主程序打包成jar或者war包)mvn install:安装主程序(会把本工程打包,并且按照工程的坐标保存到本地仓库中)mvn deploy: 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到web容器中)
maven的插件:maven命令执行时真正完成给我那个的是就是插件=jar文件=一些类。
单元测试:用的是junit, junit是一个专门测试的框架(工具),
junit测试的内容:每一个方法都是独立测试的,方法是测试的基本单位(单元测试)。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。
使用步骤: 1. 加入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
- 在maven项目中的src/test/java目录下,创建测试程序
推荐的创建测试类的名称是Test+你要测试的类名
方法必须pubulic
方法没有返回值
在方法上面加入@Test
@Test
public void TestController(){
String path = "config/beanDo.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(path);
User user = (User)context.getBean("user");
System.out.println(user.toString());
}
- 控制配置
<build>
<finalName>test</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>

! 在idea中用maven
- 让idea和maven结合使用。
idea中内置了meavn,但是一般使用,因为不好改。
配置入口: 1. file ----- > setting 配置当前工程的设置,
file ----- > otherSetting 配置以后新建工程的设置
Maven Home directory : maven的安装目录
User Settings File : 就是maven安装目录的conf/settings.xml文件
Local Repository:本机仓库位置
在Runner ---- > VM Options:
-DarchetypeCatalog=internal
为了让maven创建的快一些(不下载模板文件)
- 创建一个maven项目
-
使用模板创建项目 maven-archetype-quickstart
设置坐标
junit中
Assert.assertEquals(40, res); // 判断结果是否正确
-
生命周期双击即可
- 创建一个web项目
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
web工程打包后变成.war文件
- 依赖范围 ,使用scope标识的
scope的值有 compile(默认所有过程中), test(测试), provided(提供者 只在编译,测试时用)
scope: 表示依赖使用的范围,也就四十在maven构建项目的哪些阶段中起作用。
- maven的常用设置
- maven的属性设置
pom.xml中<properties>设置maven常用属性- maven的全局变量
自定义属性:1. 在<properties>通过自定义标签声明变量
2.在pom.xml中,使用{标签名}
- 资源插件
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.txt</include>
</includes>
<!--filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
<filtering>false</filtering>
</resource>
</resources>
</build>
作用是:
- 默认没有使用resource的时候, maven执行编译代码时,会把src/main/resource 目录中的文件拷贝到target/classes中。但是对于src/main/java目录下非java文件不处理,不拷贝到target/classes目录中
-
我们的程序有需要把一些文件放在src/main/java目录中,当我在执行java程序时,需要用到用到src/main/java目录中的文件所以此时我们要加resoucres插件处理src、main/java




