Maven项目管理工具
一、maven介绍
1、介绍:Maven是一个跨平台的项目管理和构建工具,主要用于基于Java平台的项目构建,依赖管理。
2、图示:
3、特点:
a、管理项目jar包
b、解决项目jar包依赖冲突
c、远程仓库(中央仓库),本地仓库,私服仓库
d、rpc远程调用,dubbo(接口项目发布到私服)
二、Maven的安装和配置
1、JDK环境:必须是JDK1.6以上的版本。
2、下载地址:从http://maven.apache.org/download.cgi官网上下载最新版本的maven
3、设定path路径:把下载下来的maven解压缩,然后有一个bin文件夹,这是一个bin的文件夹的目录F:\work\course\maven\maven\bin 把该目录追加到环境变量的path中。
4、检查是否成功:
5、maven下载、安装和设置博客推荐:
https://blog.csdn.net/cs4380/article/details/79158268
6、Maven的配置:
7、Maven的约定:
8、本地仓库、私服仓库配置
打开自己电脑的Maven默认仓库地址一般是C:/Users(或者是用户)/用户账号/.m2(例如:我的电脑地址C:\Users\Zz\.m2)文件夹下有一个settings.xml配置文件,可以通过修改改配置文件的信息修改Maven的本地仓库和地址和私服仓库地址。
本地指定仓库路径:<localRepository>你要修改的仓库地址(F:/work/course/maven/mavenRepository/)</localRepository>
本地的仓库:
私服仓库:
直接连接互联网
如果不想连接私服,可以直接连接互联网。只需要把连接私服的所有的路径去掉即可。
三、新建Maven项目和普通java项目强转Maven项目
1、Eclipse新建Maven项目:
2、原Java项目装换成Maven项目:(将原项目的src文件夹删除)
注意:强转成Maven项目后,Maven项目的约定还是要自己手动创建,如下图二所示
图一
图二
2、Maven常见命令(在maven项目的根目录下进行操作):
mvn compile:编译项目,在项目中生成target文件夹
我们可以清除的看到编译生成的文件夹信息如下所示:
mvn clean:清除项目编译(针对mvn compile/package/clean package命令)生成的target文件夹
mvn package、mvn clean package:编译并打包项目
经过编译打包我们可以清楚的看出mvn compile命令和mvn package命令区别:
mvn install:将项目发布到本地仓库,可以方便的被其他项目引用
四、Mavenjar包依赖(本地依赖和远程仓库下载依赖)针对于两个项目,其中一个项目需要使用另一个项目的类
1、本地依赖:
(1)、传统项目jar包引入依赖:
步骤:将要引入的项目通过mvn clean package/package打包,然后将jar包放在另一个项目的根目录lib文件夹下add build path即可。
(2)、Maven本地仓库引入依赖:
步骤:将要引入的项目通过mvn install发布到本地的Maven仓库,在需要引入的项目的pom.xml文件中将要引入的项目<groupId>、<artifactId>、<version>进行dependency即可。
2、远程仓库依赖:
Maven中央仓库地址:http://mvnrepository.com/,我们可以在这里找到自己需要的jar包,然后选择适合自己项目的版本复制dependency依赖信息即可。
3、Mavenjar包错误问题解析:
问题:
解决方法:
注意事项:如果Maven项目加载本地仓库jar包出现问题多次Maven update没有效果,把本地下载的jar包文件夹删除重新下载重启编辑器试试。
案例:我在整合springBoot和dubbo的时候,一次性复制了很多的pom依赖,结果项目出现红色感叹号,maven update不起作用,后来复制一个一个<dependency></dependency>找到出问题的jar包,删除重新下载改依赖。
jar missing问题:
五、使用Maven建立(聚合)多模块功能
1、新建simpo-parent父项目,并且在pom.xml文件中导入servletjar包依赖
2、新建simpo-service项目,将simpo-parent作为父工程引入
新建service类:
package com.simpo.service;
public class SimpoService {
public String returnName(String id) {
if("1".equals(id)) {
return "yinyuyou";
}else {
return "nimeide";
}
}
}
3、新建web项目simpo-web,将simpo-parent作为父工程引入,并且dependency simpo-service。
新建一个controllerservlet容器类:
@WebServlet("/index")//不要忘记前面的/会报错的
public class DemoController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
SimpoService simpoService = new SimpoService();//直接引入simpo-service的类
String result = simpoService.returnName(id);
req.setAttribute("user", result);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
总结:该聚合项目,simpo-service并没有执行mvn install命令,但是simpo-web能够进行引入改项目的SimpoService 类。
六、Mavenjar包引入版本冲突问题
介绍:Web工程依赖两个不同的,maven项目,依赖同一个artifactId但是版本不同,这时候就会产生mavenjar依赖冲突问题。
解决冲突:
<dependencies>
<dependency>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.itmayiedu</groupId>
<artifactId>itmayiedu-entity</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
七、Maven打包原理:
Maven中央存储库:
当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 http://search.maven.org/ 查找下载。在Maven中,当你声明的库不存在于本地存储库中,也没有不存在于Maven中心储存库,该过程将停止并将错误消息输出到 Maven 控制台。
二、添加远程仓库:
默认情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在Java.net或JBoss的储存库远程仓库中能找到。
现在,Maven的依赖库查询顺序更改为:
在 Maven 本地资源库中搜索,如果没有找到,进入下一步,否则退出。
在 Maven 中央存储库搜索,如果没有找到,进入下一步,否则退出。
在Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。
讲师画图: