Maven--Maven的核心概念
一、maven核心概念
1、Maven工程约定目录结构
2、pom文件
3、仓库
4、Maven的生命周期
5、Maven的常用命令
6、插件
7、坐标(gav)
8、依赖(dependency)
二、maven约定的目录结构
三、maven项目创建及其下载的东西
1、使用命令编译maven项目
在和pom.xml平级的文件夹下打开cmd命令窗口,运行该命令mvn complile
,可以编译src/main目录下所有的java文件
第一次下载的话比较慢,当资源下载完成之后,以后使用就会很快了
2、下载的东西
a)之后maven会开始下载东西
maven工具执行的操作需要很多插件(java类--jar文件)完成的,都是下载一些jar文件,叫做插件,插件是完成某些功能
b)下载的东西存放
一般存放到默认仓库(本机仓库):C:\Users\Administrator(登录操作系统的用户名)\.m2\repository
https://repo.maven.apache.org :中央仓库的地址
c)在根目录生成target目录
target目录为结果目录,maven编译的java程序,最后的class文件都放在target目录中
3、修改本地仓库地址(设置本机存放资源的目录位置)
a)修改maven的配置文件settings.xml,maven安装目录/conf/settings.xml
b)打开settings.xml文件,修改 <localRepository> 标签中的,指定你的目录(不要使用中文目录)
c)设置下载资源的镜像(下载jar包时更快)
打开settings.xml文件,找到<mirrors></mirrors>
标签对,里面配置镜像
<!-- 配置阿里的镜像 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
四、仓库
1、仓库概述
仓库是存放东西的, 存放maven使用的jar 和 我们项目使用的jar
maven使用的插件(各种jar);我项目使用的jar(第三方的工具)
2、仓库的分类
a)本地仓库
就是自己的个人计算机上的文件夹,存放各种jar
b)远程仓库
中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库,https://repo.maven.apache.org :中央仓库的地址
中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像
私服,在公司内部,在局域网中使用的, 不是对外使用的
3、仓库的使用
maven仓库的使用不需要人为参与。 他会自己去找,先找本地仓库,如果没有就去镜像中,再没有就到中央仓库中找
五、pom文件项目对象模型
1、modelVersion
Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0
<modelVersion>4.0.0</modelVersion>
2、坐标
a)坐标:唯一值,在互联网中唯一标识一个项目
b)groupId 组织 id,一般是公司域名的倒写。 格式可以为:
1. 域名倒写。 例如 com.baidu
2. 域名倒写+项目名。例如 com.baidu.appolo
c)artifactId
项目名称,也是模块名称,对应 groupId 中项目中的子项目
d)version
项目的版本号。如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT。version 使用三位数字标识,例如 1.1.0
e)生成项目唯一坐标
groupId 、artifactId 、version 三个元素生成了一个Maven 项目的基本坐标,在众多的maven 项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称
<groupId>公司域名的倒写</groupId> <artifactId>自定义项目名称</artifactId> <version>自定版本号</version>
f)搜索使用的中央仓库
https://mvnrepository.com/ 搜索使用的中央仓库, 使用groupId 或者 artifactId作为搜索条件
3、项目打包packaging
packaging: 打包后压缩文件的扩展名,默认是jar ,web应用是war。可以不写,
4、依赖
dependencies 和 dependency,相当于java代码中的import
例如:项目中需要使用myql驱动
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> <!--有多个依赖 可以写多个 --> </dependencies>
5、properties
设置属性
<properties> <!--maven构建项目使用的是utf-8, 避免中文的乱码--> <project.build.sourceEncoding>UTF - 8</project.build.sourceEncoding> <!--编译java代码使用的jdk版本--> <maven.compiler.source>1.8</maven.compiler.source> <!-- 你的java项目应该运行在什么样的jdk版本--> <maven.compiler.target>1.8</maven.compiler.target> </properties>
6、build
maven在进行项目的构建时, 配置信息,例如指定编译java代码使用的jdk的版本等
在build中可以配置插件,我们可以在网上搜索到这些插件,都有相关信息
<!-- build 配置maven构建项目的参数设置 --> <build> <!-- plugins 配置插件 --> <plugins> <!-- plugin 配置具体的插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <!-- 插件名称 --> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!-- configuration 配置插件的信息 --> <configuration> <!-- 告诉maven 写的代码是jdk1.8上编译 --> <source>1.8</source> <!-- 我们程序应该运行在1.8的jdk上 --> <target>1.8</target> </configuration> </plugin> </plugins> </build>
六、生命周期
1、maven生命周期
就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署
2、maven的命令
maven独立使用,通过命令,完成maven的生命周期的执行
maven可以使用命令,完成项目的清理,编译,测试等等
3、maven的插件
4、单元测试
a)使用junit依赖
junit是一个专门测试的框架(工具),可以 测试的是类中的方法, 每一个方法都是独立测试的。方法是测试的基本单位(单元)。
b)maven借助单元测试,批量的测试你类中的大量方法是否符合预期的
c)使用步骤
c1)在pom.xml文件中假如单元测试依赖
<!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
c2)在maven项目中的src/test/java目录下,创建测试程序
推荐创建类和方法的名字规范:测试类的名称 是Test + 你要测试的类名;测试的方法名称 是:Test + 方法名称
例如你要测试HelloMaven,创建测试类 TestHelloMaven
要测试的方法:
@Test public void testAdd(){ 测试HelloMaven的add方法是否正确 } 其中testAdd叫做测试方法,它的定义规则 1.方法是public的,必须的 2.方法没有返回值, 必须的 3.方法名称是自定义的,推荐是Test + 方法名称 4.在方法的上面加入 @Test
5、maven常用命令
执行命令时,要在pom文件同级目录下哦
1)mvn clean
删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除
2)mvn compile
编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
编译main/java/目录下的java 为class文件, 同时把class拷贝到 target/classes目录下面
把main/resources目录下的所有文件都拷贝到target/classes目录下
3)mvn test-compile
编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
编译test/java/目录下的java 为class文件, 同时把class拷贝到 target/test-classes目录下面
把test/resources目录下的所有文件都拷贝到target/test-classes目录下
4)mvn test
在运行该命令之后,会把上面的命令都先运行一遍:clean、compile、test-compile
会在target下生成一个目录surefire-reports,保存测试结果
5)mvn package
打包主程序,会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包
只包含src/main目录下的文件
在target目录下生成一个jar文件,文件名是:项目名称+版本号
6)mvn install
会把本工程打包,并且按照本工程的坐标保存到本地仓库中,打包到本地仓库之后在本地仓库中可以根据坐标找到
安装之后就可以给别人用了,别人可以拿来用,使用的时候根据坐标添加依赖就可以
7)mvn deploy(不常用)
部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中还会自动把项目部署到 web 容器中)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术