零基础快速入门maven
maven仓库的秘密
maven仓库的分类
本地仓库
- 本地仓库,顾名思义,就是 Maven在本地存储的地方。
- Maven的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才会被创建
- maven 本地仓库的默认位置:无论是windows 还是 linux,在默认C盘用户目录下,都会有一个
.m2/repository/
的仓库目录,这就是 Maven仓库的默认位置。
在我们下载的安装包中, conf 文件夹下的 setting.xml 文件中,我们可以指定默认的本地仓库存储路径
<localRepository>D:\mavenplus-rep</localRepository>
远程仓库
中央仓库
- 最核心的中央仓库开始,中央仓库默认是远程仓库,maven安装的时候,自带的就是中央仓库的配置,可以通过修改 setting.xml 文件,修改默认的中央仓库地址。
- 中央仓库包括了绝大数流行的开源Java 构建,以及源码、作者信息、SCM、许可证信息等。一般来说,简单的 Java 项目依赖的构建都可以在这里下载到。
下方是默认的配置,我们不需要去做任何配置。
私服
通常是公司的服务器,如一家公司可能有多个团队,其中一个团队他们是使用到了某个jar包,那么就可以上传到私服上面,其他团队需要用的话,就可以去使用。
其他公共库
如何使用 IEDA简历一个 maven 项目
maven 项目的标准目录结构
maven 核心 pom 文件
什么是 pom
pom 代表项目对象模型,它是 maven 中工作的基础组成单位。它是一个 XML 文件,始终保存在项目的基本目录中的 pom.xml 文件中。pom包含的对象是使用 maven 来构建的。pom.xml 文件包含了项目的各种配置信息,需要特别注意,每个项目都只有一个 pom.xml 文件。
项目配置信息
- project: 工程根标签
- modelVerison:pom模型版本,maven2和3只能为4.0.0
- groupId:这个是工程组的标识。它在一个组织或者项目中通常是唯一的。
- artifactId: 这个是工程的标识。它通常是工程的名称。groupId 和 artifactId 一起定义了 一起定义了 atrifact 在仓库中的位置
- version:工程的版本号。
- packaging:定义 maven 项目的打包方式,有 JAR、WAR 和 EAR三种格式。
super pom
- spuer pom 是 maven 默认的 pom。所有 pom 都继承自一个 super pom。(无论是否显示定义了这个 spuer pom)。 spuer pom 包含了一些可以被继承的默认设置。因此,当maven发现需要下载 POM 中的依赖时,它会到 super pom 中配置的默认仓库。
- 使用下方命令开查看 super pom 默认配置:
mvn help:effective-pom
依赖配置信息
1、dependencies
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
2、parent
<parent>
<groupId>xd.class<groupId>
<artifactId>demo-parent</artifactId>
<relativePath>/</relativePath>
<version>1.0</version>
</parent>
- relativePath: Maven 首先当前项目中找到父项目的 pom。然后在文件系统的这个位置 relativePath。最后在本地仓库,在远程仓库找。
3、model
有些maven项目会做成多个模块,这个标签用于指定当前项目包含的所有模块。之后对这个项目进行maven 操作,会让所有的子模块也进行相同操作。
<modules>
<module>com-a</module>
<module>com-b</module>
<module>com-c</module>
</modules>
4、properties
用于定义 pom 常量
<properties>
<java.version>1.7</java.version>
</properties>
5、dependencyManagement
应用场景:
当我们项目模块很多的时候,我们依赖包的管理就会出现很多问题,为了项目的正确运行,必须让所有的子项目使用依赖项的同一个版本,确保应用各个项目的依赖和版本一致,才能保证测试和发布的是相同的结果。
使用的好处:
在父模型中定义后,子模块不会直接使用对应依赖,但是在使用相同依赖的时候可以不加版本号。这样的好处是,可以避免每个使用的子项目中都声明一个版本号,这样项升级或者切换另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改。
父项目
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子项目1:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
子项目2:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
子项目3:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>5.0</version>
</dependency>
和dependencies的区别
- dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项 (全部继承)
- dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
maven 生命周期
什么是什么周期
- Maven 的生命周期就是对所有的构建过程进行了抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
- maven 的三个构建生命周期
-
clean
1) pre-clean 执行一些清理前需要完成的工作
2) clean 清理上一次构建生成的文件
3)post-clean 执行一些清理后需要完成的工作 -
defalut
1) validate: 验证工程是否正确
2) compile: 编译项目的源代码
3)test: 使用合适的单元测试框架来测试已编译的源代码。
4)package: 把已编译的代码打包成可以发布的格式,比如jar或者war
5)verifv: 运行所有检查,验证包是否有效
6)install:安装到maven本地合库
7)deploy: 部署到远程的仓库,使得其他开发者或者工程可以共享 -
Site
-
常用的maven基本命令
-
常用命令
1) mvn validate 验证项目是否正确
2) mvn package: maven打包
3)mvn generate-sources 生成源代码
4)mvn compile 编译
5)mvn test-compile 编译测试代码
6) mvn test 运行测试
7)mvn verify 运行检查
8) mvn clean 清理项目
9)mvn install 安装项目到本地合库
10)mvn deploy 发布项目到远程仓库
11) mvn dependency:tree 显示Maven依赖树
12)mvn dependency:list 显示Maven依赖列表 -
常用参数
1) -D 指定参数,如-Dmaven.test.skip=true 跳过单元测试
2)-P 指定 Profile 配置,可以用于区分环境; -
web相关命令
1) mvn tomcat;run 广tomcat
2) mvn jettv:run 户ietty
3) mvn tomcat:deplov 运行打何部署