maven概念
-
我们之前写代码时,会导入很多需要的jar包,都放在项目中,然后这就会造成我们开发完成后项目变得很大,而maven就是来解决这种问题的,用maven开发项目,jar包不在项目中,而在jar包仓库中存放着,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,所以我们的项目空间就会占用的很少,一个普通web项目要几十兆的话,一个maven只需要几百k.
-
所以说,maven就是用来合理叙述项目间的依赖关系的.可以这么理解,当有十个相同需要jar包的项目的时候,传统的项目都会导入这些相同的jar包,而maven的jar包都在仓库中放着,只需要导入一次,是不是就节省了空间,就跟代码重用一样的道理.
-
maven的核心功能:
- 其一就是依赖管理: 即maven工程对jar包的管理过程.
- 其二就是一键创建.
-
maven项目的一键构建:
- 我们之前的项目,使用本地安装的tomcat的时候,都是要经过编译,测试,运行,打包,安装,部署等一系列过程.
- 什么是maven构建: 指的是项目从编译,测试,运行,打包,安装,部署整个过程都交给maven管理.
- 什么是maven一键构建: 指的是我们不再使用本地安装的tomcat,而使用maven自身继承的tomcat插件,整个构建过程,使用maven一个命令就可以轻松完成.
maven仓库的种类和各个仓库间的关系
maven工程-----里面放的有jar包坐标
--首先.它会自动去c盘找本地仓库: `${user.home}/.m2/repository`,其中`${user.home}`就表示系统盘.
--**刚安装好maven**的时候我们电脑上的**本地仓库**是没有jar包的.
--本地仓库找不到之后,这时候如果我们电脑联网了,它就会自动去网上的中央仓库(放着几乎所有开源的jar包)下载jar包,没联网就会报错.
-
总结一下:
- 仓库分三类:
- 本地仓库: jar包在本地的放置位置,启动maven项目首先会默认在本地找jar包.
- 中央仓库: 启动maven项目在本地找不到对应jar包的时候,就会去中央仓库找.
- 远程仓库(私服): 在公司中,一般都会自己建一个远程仓库供公司使用,和maven项目所在的电脑在同一个局域网的时候,本地找不到它会先在远程仓库找,远程仓库找不到再去中央仓库下载.
- 仓库分三类:
-
本地仓库位置的修改: 找到maven解压目录下的conf文件夹—> settings.xml—> 通过’自定义本地仓库路径’修改, 注意路径不能有中文,不能有空格.
maven标准目录结构
- maven项目构成
- 核心代码部分
- 核心代码配置文件部分
- 测试代码部分
- 测试代码配置文件部分
- 传统的都是放在src目录下的
- maven项目标准目录结构
- src/main/java目录 放置核心代码部分.
- src/main/resource目录 放置核心代码配置文件部分.
- src/test/java目录 放置测试代码部分
- src/test/resources目录 放置测试配置文件部分
- (web工程比java工程多一个)src/main/webapp目录 放置界面资源,包括js,css,图片等
maven常用命令
我传了一个很简单的maven项目,大家可以根据这个来掌握命令,尤其是注意一下其中路径的写法: maven项目.
- mvn clean 会删除maven项目下的target目录
- mvn compile 重新生成maven项目下的target目录(里面放着src/main/java目录下编译后的class文件等)
- mvn test 会在target目录下生成一个test-classes文件夹,里面放着src/test/java下的代码的编译class文件
- 注意: 如果直接编译test文件,没有target目录会自动生成,而且还会编译src/main/java下的核心代码
- mvn package 打包项目,没有target目录会生成target目录,里面放着打包生成的war包,而且会自动编译核心代码和测试代码.
- mvn install 该命令相当于执行了前面三个命令,没有target目录会生成target目录,会自动编译核心代码和测试代码,而且该命令生成的war包也会放在该目录下,同时会自动将该war包安装到本地仓库.
- 后一个命令的执行,都包含了前一个命令的执行,即我执行mvn test,会包含执行mvn compile这个意思.
maven生命周期
- 清理生命周期 即:
mvn clean
. - 默认生命周期 即:
mvn compile->test->package->install->deploy
- 站点生命周期(不管)
maven概念模型图
.
- 项目对象模型中包括: 项目自身信息,项目运行所依赖的jar包信息,项目运行环境信息,比如jdk等.
- 依赖管理模型放的都是jar包的坐标,它指向的三个箭头从下往上依次是: 本地仓库, 远程仓库, 中央仓库.
- 注意: maven的生命周期中的每个构建命令都对应了maven底层的一个插件.
idea如何使用maven的话,我百度云上面有视频,我分享给大家吧: idea创建项目-要提取码的话就是:tk6r.
几个问题
-
在用idea创建maven的web项目的时候,我碰到了一个问题,就是src/main/java下不能创建servlet,搞了半天,解决办法如图:
. -
我们在web项目中需要导入jar包时就只需要在
pom.xml
下添加这样一段话就好了:<dependencies> 要多少个jar包就写多少个<dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
- 在这里还要注意:
- 这个idea是可以帮我们完成的,在报错的地方看提示:
类似添加到dependencies的字样
- 当我们自己添加的时候,先填
<artifactId>
,如果你的本地仓库有这个jar包,填的时候有提示,如果本地仓库没有,就要去中央仓库找- 可以直接百度maven中央仓库,我把链接放这里: maven中央仓库
- 然后搜索你要的jar包,然后复制对应jar包的
<dependency>
到当前项目下的pom.xml中来就ok,如果电脑联网了,它会自动下载jar包到本地来的.
- 这个idea是可以帮我们完成的,在报错的地方看提示:
- 在这里还要注意:
-
我在创建maven项目后,运行的时候,报错说无法编译jsp文件,也搞了我好久,原因是因为tomcat和jdk不兼容,我的jdk是1.8,需要tomcat7才可以兼容,而maven默认用的是tomcat6,解决办法如图:
- 注意: 在这期间可能tomcat下载不下来,反正我就是这样,你只需要选中右侧的那个
Dependencies
,然后鼠标右键点击Download Resources
就可以完美解决.
.
- 注意: 在这期间可能tomcat下载不下来,反正我就是这样,你只需要选中右侧的那个
-
还有一个错就是说在运行的时候,报错说
不能将servlet作为httpservlet
,反正就是这么个意思,原因是因为本地tomcat中的jar和maven中的jar包重合了,解决办法是在依赖中添加一句话,是的编译的时候用依赖中的jar,运行的时候用tomcat的jar.如图:
-
对于maven项目中xml依赖配置的问题:
- 一般它的属性默认就可以了,也就是编译运行测试都用,但是有几个常用的不是这样子
- jsp和servlet设置为
provided
,只用于编译和测试,因为它会和tomcat中的jar冲突,造成不能将servlet识别为httpservlet. - jdbc驱动设置为
runtime
,只用于运行时. - junit设置为
test
,表示只用于测试时.
-
记得在maven安装路径下的
config文件夹
下的setting.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> </mirrors>
-
还有就是在用maven连接数据库的时候,这个依赖不是最新最好,而是要适应自己数据库版本才行!!!我上过当,我是5.1的数据库下载了一个8.0的依赖,搞死我了!!!