三层架构
目前的技术存在的问题
- 一个项目就是一个工程
- 项目过大,就不适合用package来划分模块
- 借助于Maven就可以将一个项目划分为多个工程
- 项目中需要的jar包必须手动“复制”,”粘贴“到WEB-INF/lib目录下
- 同样的jar包出现在不同的项目中,浪费空间也比较臃肿
- 借助Maven可以将jar包保存在“仓库中”,有需要的工程可以“引用"这个文件接口
- jar包需要别人替我们准备好,或者在官网下载
- 有些技术的官网就是通过Maven或SVN等专门的工具来提供下载
- 有时候下载的jar包是不规范的
- 借助Maven可以规范的下载jar包,所有的知名框架都在存放在Maven的中央仓库中
- 一个jar包依赖的其它jar包也需要自己手动加入到项目中
- 如果所有的jar包之间的依赖都需要我们了解,那就工作量极大
Maven是什么
- Maven是一款服务于Java平台的自动化构建工具
- 自动管理jar文件
- 自动下载一个jar包依赖的jar包
- 总之可以解决上面的问题
构建
构建就是一些步骤,完成项目代码的编译,测试,运行,打包,部署
- 清理:把之前项目变异的东西删除掉,为新的编译代码做准备
- 编译:把程序源文件编译为执行文件,java–>class文件(批量的)
- 测试:可以执行程序代码,验证功能是否正确(批量的)
- 报告:生成测试结果的文件
- 打包:把所有的class文件,配置文件压缩到一个压缩包中,java程序文件的压缩文件是.jar扩展名的;web文件压缩文件是.war扩展名
- 安装:把jar,war 文件安装到本机仓库
核心概念
POM
:一个文件,pom.xml
,项目对象模型- 约定的目录结构:Maven项目的目录和文件的位置都是规定的
- 坐标:是一个唯一的字符串,用来表示资源的
- 依赖管理:管理项目可以使用jar文件
- 仓库管理:存放资源
- 生命周期:构建项目的过程
- 插件和目标:执行Maven构建的时候用的工具是插件
安装
- 下载地址:http://maven.apache.org/download.cgi
- 配置环境变量
M2_HOME
=E:\MavenProject\Maven\apache-maven-3.6\apache-maven-3.6.3
- 把
M2_HOME
变量加到Path
之中,%M2_HOME%\bin;
- 注意,要是
JAVA_HOME
环境变量没有配置好,会出错,要配置jdk
- 测试
- 在
cmd
窗口输入mvn -v
命令
- 在
- 默认下载到的地址
- 默认仓库:
C:\Users\DELL\.m2\repository
- 默认仓库:
- 在
pom.xml
所在目录在命令行窗口输入命令mvn compile
,进行下载
仓库分类
- maven 的插件(jar包)
- 第三方jar 包
- 本地仓库
- 远程仓库(互联网上的)
- 中央仓库 https://repo.maven.apache.org
- 中央仓库镜像(重要城市)
- 私服(公司内部)
使用:本机–>私服–>镜像–>中央仓库
Maven约定的目录结构
src
- main :主程序
java
代码和配置文件
java
: 包和包中的java
文件resources
:java
程序要使用的配置文件- test 测试程序代码
java
: 测试程序包和包中的java
文件resources
:java
程序要使用的配置文件pom.xml
:Maven
的核心文件(必须的)
测试
新建一个上面的目录,并新建一个java
文件,编译之后在项目目录下生成一个targer/classes
目录,java
文件编译之后就会在这个目录下生成class
文件
package com.atgw;/*
* @author GaoWei
* Date 2021/1/22--19:53
*/
public class HelloMaven {
public int add(int n1,int n2){
return n1+n2;
}
public static void main(String[] args) {
HelloMaven hello = new HelloMaven();
int res = hello.add(10,20);
System.out.println("10+20="+res);
}
}
在class目录下进入cmd
命令,输入下面的命令执行上面的程序
java com.atgw.HelloMaven
设置本机存放资源的目录位置
-
修改Maven的配置文件
maven安装目录/conf/settings.xml
- 备份
settings.xml
-
在
settings.xml
中修改为E:\MavenProject\Maven\maven_repository
(不要出现中文)<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository <localRepository>/path/to/local/repo</localRepository> --> <!--配置本地仓库位置--> <localRepository>E:/MavenProject/Maven/maven_repository</localRepository>
pom.xml
文件
坐标
在此网址查找坐标 https://mvnrepository.com/
modelVersion | 版本 4.0.0 |
---|---|
groupId | 组织id,一般是公司域名的反写(com.baidu) |
artifactId | 项目名 |
version | 项目版本号 |
packaging | 打包压缩之后的类型(jar,war等) |
groupId
,artifactId
,version
总称为坐标(唯一)
<groupId>com.atgw</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
依赖
根据下面的坐标在本地仓库中查询相关资源,也就是把 jar 包引用到项目中
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
</dependencies>
properties
:设置属性build
:与构建相关的配置
生命周期,命令,插件
生命周期
- 构建项目的过程
- 清理
- 编译
- 测试
- 报告
- 打包
- 安装
- 部署
使用命令对上面的生命周期进行执行
命令执行时,真正执行的是插件(jar包,类文件)
常用命令
mvn clean | 清除之前编译和测试产生的目录 |
---|---|
mvn compile | 编译主程序 编译 main/java/ 目录下的java 文件为class 文件,同时把class 文件拷贝到target/classes 目录下面把 main/resources 目录下的所有文件都拷贝到target/classes 目录下 |
mvn test-compile | 编译测试程序 |
mvn test | 执行测试代码(不用提前编译,会自动把之前的命令过程都执行) |
mvn package | 打包主程序 |
mvn install : | 把之前打包的文件安装到本地仓库中 |
IDEA中使用
下面的链接详细描述了创建普通项目和web项目的过程
-
idea中内置了maven,但是一般不使用内置的,因为内置的修改maven设置不方便
-
使用自己安装的maven,需要覆盖idea中默认的设置,让idea指定maven安装位置等信息
配置的入口
- 配置当前工程 settings
- 之后新建工程 other settings
创建se
模块
使用技巧
pom.xml
文件刷新
有时候在pom文件配置之后,由于没有刷新而导致会出现红色提示线
- 单个工程刷新
- 全部工程刷新
设置文件类型
导入模块
依赖范围
表示在maven构建项目的哪些阶段起作用
- 标签
<!--表示junit只在测试阶段起作用-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
test | compile(默认) 所有用到的jar包需要自己带 | provided 如果有,就不用自己带 | |
---|---|---|---|
对主程序是否有效 | 否 | 是 | 是 |
对测试程序是否有效 | 是 | 是 | 是 |
是否参与打包 | 否 | 是 | 否 |
是否参与部署 | 否 | 是 | 否 |
常用操作
属性设置
<properties>
<!--maven构建项目使用编码,避免中文乱码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--编译代码使用的jdk版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<!--执行代码的jdk版本-->
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
全局变量
<properties>
<!--自定义变量-->
<spring-vision>5.2.2</spring-vision>
</properties>
- 定义之后,在下面的值引用时
${spring-vision}
资源插件
-
默认没有使用
resources
的时候,maven
执行编译代码时,会把src/main/resources
目录中的文件拷贝到target/classes
目录中;对于src/main/java
目录下的非java
文件不处理,不拷贝到target/classes
目录中 -
我们的程序需要把一些文件放在
src/main/java
目录中,当我们执行java
程序时,需要用到src/main/java
目录中的文件(比如properties配置文件)。需要告诉maven
在mvn compile src/mian/java
目录下的文件时,需要把文件一同拷贝到target/classes
目录中,此时需要在中配置 -
<build> <resources> <resource> <directory>src/main/java</directory> <includes><!--目录下的 .properties, .xml文件都会扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!--filtering = false 表示不启用过滤器,,.*properties已经起到过滤的作用了--> <filtering>false</filtering> </resource> </resources> </build>