目录
这一篇博客可能比较的长,但是很全面,我把学习MAVEN的所有情况都写下来了,可以根据目录按需查看
为什么要学习maven?
- 在javaweb开发中需要使用大量的jar包,这些jar包需要我们手动去加载;当jar包少还好,一旦需要大量的jar包,那么我们手动配置效率将极低
- 如何使用一个东西自动的帮助我们导入和配置项目需要的jar包
Maven就是用来解决上面问题的一个工具,Maven是一个架构管理工具
5.1 Maven项目架构管理工具
目前我们使用这个工具主要是用来导入jar包的
Maven核心思想:约定大于配置
- 有约束, 不要去违反
Maven会规定你如何去编写Java代码(主要就是要求目录结构),必须要按照这种规范来编写代码
首先说明一下创建的maven项目的目录结构
-
我们创建的所有的文件、引入的所有资源文件都应该在main文件夹下
-
按照maven的规定,main文件夹下应该只能有java、resources、webapp这3个文件夹
-
我们创建的java文件全部存放在java文件夹中
-
创建的java文件需要使用的资源文件全部存放在resources文件夹中
-
所有的JSP页面和JSP页面使用的资源文件都应该存放在webapp文件夹中
- webapp下面可以创建文件夹来按照类被存储我们创建的JSP文件和资源文件
- WEB.XML文件件存放在webapp/WEB-INF文件夹下
- 一般我们将静态资源文件存放在webapp/static文件夹下,这个文件夹要自己创建,然后按照资源的类别再创建子文件夹,然后才是将静态资源文件存入指定的子文件夹中
从上图我们就可以知道,像css、js、img等资源就可以放在static目录下面
-
说明一下webapp/WEB-INF文件夹
- 这个文件夹很特殊,从客户端不能直接访问这个文件夹中的资源,这里面的东西对用户不可见,我们一般把一些机密/重要的文件存放在这个文件夹
5.2 下载安装Maven
MAVEN下载地址
下载之后解压就可
了解安装之后的目录结构
-
bin:一些执行文件
-
conf:配置文件
-
lib:依赖的jar包
-
boot:启动需要的资源
查看配置文件
即我们需要配置的就是这个文件中的镜像,镜像就是方便我们国内下载资源的,原因就是有长城防火墙
5.3 配置环境变量
新增两个环境变量
-
M2_HOME:maven安装目录下的bin目录
-
MAVEN_HOME:maven安装目录
-
在系统的Path中配置MAVEN_HOME
-
检查MAVEN安装好了没有
5.4 阿里云镜像
就是配置maven配置文件中的镜像
镜像(mirrors):加速我们下载国外资源
国内建议使用阿里云镜像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
将上面的节点粘贴到settings.xml的节点中
5.5 配置本地仓库
创建一个本地仓库(即在本地电脑上的一个仓库),相对的就是远程仓库
创建本地仓库
打开settings.xml
新增一个localRepository节点,并设置其值为刚刚创建的本地仓库路径
5.6 在IDEA中使用MAVEN
- 启动IDEA
- 创建一个maven项目
- 等待项目自动初始化完毕
- 回到我们创建的本地仓库,查看变化
- IDEA中的MAVEN设置
这一步设置其实是非必须的,主要就是IDEA这个IDE中,有时候会自动将MAVEN_HOME改为IDEA自带的MAVEN_HOME
所以我们在创建好MAVEN项目之后,为了确保使用的是我们指定的maven和本地仓库,我们应该去检查一下
- 到这里,MAVEN在IDEA中的配置就完成了
5.7 创建一个普通的MAVEN项目
5.6中是使用的一个MAVEN模板创建的MAVEN项目
这里我们就直接创建一个普通的MAVEN项目
怎么在创建的普通MAVEN项目中添加WEB文件夹,使得这个项目变为一个WEB项目?
在这个项目中新增WEB文件夹
完成
而前面使用MAVEN模板创建的文件目录与普通的maven目录不同
可见使用maven模板创建出来的项目是一个javaweb项目(因为自动包含了我们在Tomcat讲解的时候提到的javaweb要使用的文件)
但是这个文件夹中没有我们创建普通maven项目时的几个目录,而javaweb应该是在Java项目的基础上扩展了web的内容,所以上面使用maven模板创建的这个文件夹是不完整的,它还缺少了普通maven项目那样的目录结构
所以我们可以自己手动的创建对应的文件夹使得这个项目的文件结构符合maven规范,使其完整
test文件夹暂时不要,所以先不创建
5.8 IDEA标记文件夹功能
但是普通的maven的文件夹是有颜色的,而这个文件夹的颜色我们也是可以设置的
- 方法1
- 方法2
然后选中对应的文件夹,再点击上面的Mark as中对应的图标即可
5.9 在IDEA中配置Tomcat
出现这个警告的原因就是:在使用浏览器请求服务器上的资源的时候,通过tomcat的时候我们知道,服务器程序是去指定的webapps文件夹下面去找资源然后返回给客户端,而这里我们新创建的服务器程序并没有指定一个可以去给文件夹下找资源返回给客户端,所以报警告信息
5.10 pom.xml
maven侧边栏
项目中的pom.xml
pom.xml是maven的核心配置文件
5.11 MAVEN仓库的使用
- 登陆远程maven仓库
https://mvnrepository.com/
- 找到要导入的jar包
- 复制依赖
- 在本地maven项目中导入这个依赖
使用maven的时候会出现的问题:文件导出问题
原因:因为maven的规定大于配置,且maven要求Java文件夹中只能存储java文件,如果我们在这个文件夹中使用到了XML/properties文件,那么这些文件是不能导出的,这就使得我们在tomcat的webapps文件夹下的web程序不完整
解决:直接从网上粘贴解决问题的配置代码(不要重复造轮子)
把下面的配置粘贴进pom.xml文件的build中
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
注意:我们在使用maven的时候肯定是有一个具体的jar包需要我们去导入的,比如我们创建一个servlet,那么我们第一步就是使用maven导入HttpServlet的jar包
在tomcat的安装目录/webapps中有一个examples,这个目录下面有很多的servlet例子
可见tomcat可以运行这个servlet,证明tomcat中有这个jar包
去到tomcat的lib包中找,发现只有一个servlet-api.jar,我们可以复制这个名称再去搜索一次
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
5.12 IDEA操作-查看依赖之间的关系
5.13 解决问题
- 解决每次创建maven项目都要手动配置本地maven的问题
既然要设置一个全局的配置,当让不能再某一个项目里面配置
- 打开IDEA默认界面
- 选中设置settings
- 解决IDEA中使用maven模板创建的项目自动生成的web.xml版本较老的问题
上图显示的就是IDEA中maven项目自动为我们创建的web程序文件夹,这个文件夹在前面也分析过,我们在tomcat上部署的就是这个文件夹中的网页文件,或者说这个文件夹就是一个tomcat的webapps中的一个文件夹,而我们知道webapps下面的一个文件夹就是一个web程序
既然IDEA本来就是按照tomcat中webapps文件夹下的一个文件应该有的结构为我们自动生成的上图的结构,那么我们解决web.xml最快、最好的方法就是去直接使用tomcat/webapps中某一个项目的web.xml的配置
直接使用ROOT/WEB-INF/web.xml文件的内容是因为我们安装好这个版本的tomcat之后,测试的时候访问的localhost:8080就是访问的ROOT/index.xml,所以它的web.xml文件内容肯定是最兼容当前版本的tomcat的,所以直接复制粘贴是最快最好的办法