Maven的核心概念包括: POM、约定的目录结构、坐标、依赖、仓库、生命周期、插件和目标、继承、聚合。
POM、
学习maven就是学习pom.xml的配置
约定的目录结构、
因为 :约定>配置>编码
我们把具有上述特点的工程教maven工程
坐标(gav)
我们通过坐标找到 jar包 坐标信息包含(组织名,模块名称,版本号)
groupId:组织名称,代码。公司,团体或者单位的标识。这个值常使用的公司域名的倒写。
artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名。项目名称是唯一的。
version: 版本,项目的版本号,使用的数字。三位组成。例如 主版本号.次版本号.小版本号。
然后我们去本地仓库看看
当然了,如果你上传到库上,可已从对应的云镜像中下载下来。
依赖、scope
依赖范围表示:这个依赖(jar和里面类)在项目构建的那个阶段起作用。
使用:
我们在pom.xml文件下声明需要用的依赖jar包,+scope
用的时候需要声明导包
然后对于同一项目下其他对象,我们使用的时候就可以不用导包或者,(项目没写)
见下图可见性
常用的范围:(学不明白没关系,就用默认,导致的结果就是代码没优化,跟屎一样)
compile (默认就是这个范围)。
(1) main目录下的Java代码可以访问这个范围的依赖<
(2) test 目录下的Java代码可以访问这个范围的依赖心
(3)部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。
test
(1) main目录下的Java代码不能访问这个范围的依赖<
(2) test 目录下的Java代码可以访问这个范围的依赖<
(3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:对junit的依赖。仅仅是测试程序部分需要。
provided←
(1) main目录下的Java代码可以访问这个范围的依赖<+
(2) test 目录下的Java代码可以访问这个范围的依赖+
(3)部署到Tomeat服务器上运行时不会放在WEB-INF的lib目录下
例如: servlet-api _在服务器上运行时,Servlet 容器会提供相关API,所以部署的时候不需要。
这个还有一个以来的传递性,类似于,类属性在父子继承中的关系,我不学
甩个图,懂得都懂。
依赖原则
1 要用 log这个jar包,根据目录结构 1 的儿子 2 有,用儿子 2 的不用孙子 3 的
就是写声明的先后,
依赖的排除
自定义标签
如果对于多个版本没法统一控制,我么可以通过一个变量批量控制
${spring.version}
使用到了spring-jdbc
仓库、
本地仓库,远程仓库,
不写笔记了你上b上一搜一堆解释的
Maven的生命周期、
主要分为
compile 编译项目的源代码
test-compile 编译测试源代码
test 进行单元测试,便于打包
package 打包成可发布格式
install 安装到本地仓库
插件和目标、
继承、
父工程pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 坐标-->
<groupId>com.jxl.mavendemo_1</groupId>
<artifactId>hello_word</artifactId>
<version>1.0</version>
<!-- 修改打包方式 -->
<packaging>pom</packaging>
<!-- 配置-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
子工程中要指定父工程
<parent>
<groupId>com.jxl.mavendemo_1</groupId>
<artifactId>hello_word</artifactId>
<version>1.0</version>
<!-- 父工程pom.xml的相对路径-->
<!-- 从当前pom位置去找-->
<relativePath>../父工程/pom.xml</relativePath>
</parent>
之后子工程写依赖可以不写版本
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
指定父工程可以得到父工程所有的依赖
父工程不写<dependencyManagement>
子工程可以继承父工程的版本,子工程可以不写版本
聚合。
对于多个模块的开发使用,我们不用一个个打包成jar包放入本地仓库管理
用法:
找到另一个管理工程 项目总
<modules>
<module>../组项目1</module>
<module>../组项目2</module>
<module>../组项目3</module>
</modules>
这样打包 项目总 组项目1,组项目2,组项目3可以一起打包在一起