1. 原始的开发姿势
传统的开发方式下,我们是通过把我们 写好的代码
+额外的第三方的jar包
压缩之后发给其他项目组的成员;
- jar包的体积有可能很大,及其不方便传输的
- 这种方式及其不方便团队协作的
- 传统的这种方式是不方便我们进行jar包的管理 升级 维护的;
2. 项目的构建步骤
- 编写代码
- 编译
- 单元测试
- 生成文档
- 打包
- 部署
3. Apache Maven 是做什么用的?
- 免费,开源,跨平台(apache的顶级项目)
- Maven 是一个项目管理和构建自动化工具,主要为Java平台的项目构建、依赖关联和项目信息管理提供服务。
- 使用Maven能够通过软件代替开发人员手工进行项目构建的流程,所有繁琐的步骤通过自动化命令,如全自动流水线般完成工作。
- 是目前使用最为广泛的项目构建工具。
- 在目前业内比较主流的项目构建工具(maven gradle)
4. Maven一图深入解析
maven最主要的功能:
- 依赖管理
- 打包
5. Maven客户端的安装
安装maven之前首先确保已经安装了jdk,并且配置了JAVA_HOME
环境变量;
-
准备压缩包
apache-maven-3.5.2.zip
-
解压到自己规定的目录
-
配置Maven的环境变量
M2_HOME=E:\apache-maven-3.5.2 Path=%M2_HOME%\bin
-
验证是否安装成功
mvn -v
6. maven的配置
我们使用maven的时候,需要配置本地仓库的位置;
建议: 把我发给你们的
setting.xml
文件,直接覆盖你的配置文件;更改本地仓库地址即可;
7. Maven拉取jar包的流程
8. maven与idea集成
配置完成就与idea已经集成了;
9. 创建maven项目的方式
9.1 新建Maven的普通项目
9.2 创建一个java的普通项目
创建项目完成之后,添加对maven的支持
9.3 Maven的项目结构
因为maven是一个自动化项目构建工具,所以我们的maven项目的结构是固定的;
10. maven的jar包引入
maven底层通过坐标查找jar包的时候是三级定位: group/artifactId/version/{artifactId}-{version}.jar
,通过上级定位就可以在硬盘找找到唯一的一个jar包了;
注意: 在实际开发过程我们可能会遇到下面问题:
(1) 导入jar包卡主不动(一直在下载):
解决:
检查网络时候良好
关闭项目,再重新打开项目,点击刷新
(2) 坐标写的没问题,就是报错:
进入到三级定位的目录,删除里面生成的临时文件,再刷新
11. maven的打包功能
maven是以插件化
的形式来运行的;而maven也给我们自带了好几个基础插件,但是我们通过基础打包插件发现基础的打包插件只能给我们打包我们自己编写的代码
,无法打包项目中引入的第三方的依赖,那么我们就需要引入一个打包的增强插件shade
;
使用shade 打包插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<!-- put your configurations here -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
12. maven中的依赖管理
-
maven中的依赖是具有继承(传递)性
-
如果我们要阻止依赖的传递
optional
的值要设置为true<dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> <!--阻止依赖的传递--> <optional>true</optional> </dependency>
-
排除依赖
<dependency> <groupId>org.xzy</groupId> <artifactId>java022</artifactId> <version>1.0-SNAPSHOT</version> <!--依赖排除 注意:依赖排除时不需要version--> <exclusions> <exclusion> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> </exclusion> </exclusions> </dependency>
13. maven的复合项目
复合项目是可以互相依赖的;
14. maven的私服
如果公司需要安装maven私服,则按照nexus的安装过程安装就行了;
15. Maven的依赖范围
compile: 源代码可以调用 会随项目打包
provided: 源代码可用 不会随项目打包(servlet jsp)
runtime: 源代码不可用 只在运行时有效 会随项目打包(jdbc驱动)
test: 源码可用 运行时可用 但是不会随着项目打包(junit单元测试)