Maven,项目架构管理工具,方便我们管理jar包。
简介
为什么要学习这个技术?
- 在Javaweb开发中,需要使用大量的jar包,我们手动去导入很麻烦
- 如果能够让一个东西自动帮我们导入和配置这些jar包
- Maven应运而生
Maven:项目架构管理工具,方便Java开发时导入jar包。详细介绍,见菜鸟教程。
- 核心思想:约定大于配置(有约束,不要去违反)
- 会规定如何去编写Java代码,必须要按照这个规范来
- 不仅仅是开发web应用程序时可以使用Maven进行构建项目
下载&安装
下载
官网:https://maven.apache.org/download.cgi。
下载完成后,解压即可。(建议这些资源包都放置在一个固定的文件夹中。)
配置环境变量
Windows系统,配置如下:
- M2_HOME:maven目录下的bin目录(Spring等框架中使用)
- MAVEN_HOME:maven目录
- 在系统的path中配置%MAVEN_HOME%\bin
Mac系统,配置如下:
~/.bash_profile
是bash终端环境的配置文件,环境变量可放到里边。要使配置文件立即生效还需要执行命令source ~/.bash_profile
,而且关闭终端窗口后需要再执行一遍才能生效。~/.zshrc
是zsh终端环境的配置文件,环境变量可放到里边。每次开机都会默认执行该文件。要使配置文件立即生效还需要执行命令source ~/.zshrc
。关闭终端窗口不影响。
步骤(在终端中进行配置):
vim ~/.bash_profile
。若没有这个文件,则新建一个。添加以下语句export M2_HOME=/Users/qsdbl/Documents/Java/Maven/apache-maven-3.6.3/bin
。maven目录下的bin目录export MAVEN_HOME=/Users/qsdbl/Documents/Java/Maven/apache-maven-3.6.3。
maven目录export PATH=$PATH:$MAVEN_HOME/bin
- 作用:添加程序所在的路径(主要是最后的PATH)
vim ~/.zshrc
。若没有这个文件,则新建一个。添加以下语句source ~/.bash_profile
。使.bash_profile配置文件立即生效(或将上边在.bash_profile中添加的语句添加到这里)
- 作用:使”.bash_profile文件“开机生效
source ~/.zshrc
。使.zshrc配置文件立即生效

查看Maven是否安装成功,保证必须配置完毕!mvn -version
或mvn -v
1 |
qsdbl@qsdbl hexo_blog % mysql -uroot -p123Cyj-- |
阿里云镜像
镜像:mirrors
- 作用:加载下载
- 在
Maven目录/conf/settings.xml文件
中添加阿里云镜像地址
国内建议使用阿里云的镜像(百度搜索一下就有)
1 |
<!-- 阿里镜像仓库 --> |
本地仓库
在本地的仓库,远程仓库;
建立一个本地仓库:localRepository
1 |
<localRepository>/Users/qsdbl/Documents/Java/Maven/apache-maven-3.6.3/maven-repo</localRepository> |
在IDEA中使用
SDK:Software Development Kit (软件开发工具包)
JDK:Java Development Kit (Java开发工具包;jdk属于sdk的一种)
使用maven模板创建项目
启动IDEA
创建一个Maven web项目
点击+号,添加属性archetypeCatalog=internal。
等待项目初始化完毕
如上图,左侧出现警告⚠️。提示
No archetype found in remote catalog. Defaulting to internal catalog
,解决办法是:在前边选择maven文件那一步时,添加该属性archetypeCatalog=internal。观察maven仓库中多了什么东西
IDEA中的maven设置
注意:IDEA项目创建成功后,看一眼maven的配置
到这里,Maven在IDEA中的配置和使用就OK了
创建普通maven项目
这个地方不要勾选使用Maven模板(Create from archetype)。
上图是普通的Maven项目,pom文件中配置很少。下图是使用webapp模板创建的Maven项目。
新建文件夹
参考普通maven项目,在maven web项目中新建一些文件夹(缺少的)。新建文件夹后,鼠标右键标记文件夹。
标记后的文件夹,图标与普通文件夹有所不同。
或在“项目结构配置”中进行配置
配置Tomcat
Tomcat配置请看这篇博客:传送门。
启动Javaweb项目
点击工具栏的绿色三角形即可启动Javaweb项目。
这里访问到的Hello World!
是Tomcat的webapps文件夹下web应用程序文件夹内的index.jsp文件(构建项目自动生成的,输出文件在上图左侧的target文件夹内)。
在webapps文件夹下自动新建了一个web应用程序文件夹(刚刚创建artifacts时(见Tomcat笔记)填写的Application context
)
该文件夹内存放的就是一个web应用程序,里边一般都会有一个index.jsp(或index.html)文件和WEB-INF文件夹(见Tomcat笔记 )。
程序结构
web应用程序结构,一般根目录下有这些文件(编译后):
- META-INF
- WEB-INF
- java代码(java文件夹内的,不包括java文件夹)
- java代码相关的资源(resources文件夹内的,不包括resources文件夹)
- 网站配置文件web.xml
- 放一些机密文件(该目录下的文件用户是没有访问权限的)
- index.jsp
- 网站首页
- …
- web应用程序开发时,webapp文件夹内我们建立的文件夹或文件(例如建立一个文件夹static,里边又建html、js、css、img等文件夹存放相应的静态文件)
打包后的web应用程序结构与开发时的项目结构是不一样的。开发时web应用程序各文件建议放的位置:
注意:Maven构建项目,需要注意“约定大于配置”。其他文件放到代码文件夹(Java文件夹)中是不会被保存到打包生成的web应用程序中的,不过也可以通过配置pom.xml文件解决,具体解决方法点这里。但还是建议按照Maven的约定来,资源文件放到resources文件夹中,Java代码放到java文件夹中。
根目录
- “/”代表当前web应用程序,对应开发时的webapp文件夹。
../
代表上一级页面。- JSP文件中,可以使用
<%= pageContext.request.contextPath%>
或"request.getContextPath()"
获取当前JSP页面所在的路径(下边的例子可以访问到放到与JSP页面同级的login程序)
classpath
src/main
下的java和resources文件夹中的内容在编译打包成web应用程序后存放classpath中(不包括Java和resources文件夹)。
例如:classpath/db.properties
即可读取到开发时放到resources文件夹中的db.properties文件。classpath/包名.HelloServlet.class
即可读取到开发时写的某个类。(classpath要替换成/WEB-INF/classes
)
classpath = /WEB-INF/classes
与 web.xml
同级(“/”代表当前web应用程序,对应开发时的webapp文件夹)。
web.xml
web.xml文件是web应用程序的核心配置(例如:配置Servlet映射、Session超时配置、过滤器配置等)。
总结
resources、java文件夹,编译后其中的文件,访问路径为classpath/文件名
,classpath=/WEB-INF/classes
。
webapp文件夹,编译后,其中的文件,访问路径为/文件名
,有建多级文件夹来存放文件的则文件名前加上。
网站配置文件web.xml的访问路径为:/WEB-INF/web.xml
pom文件
pom.xml文件是maven的核心配置文件。
pom文件详解
1 |
|
导入依赖
自动导入
在pom.xml文件中的dependencies标签内导入文件依赖,maven会帮我们导入(下载)该依赖和相关的依赖(jar包),没有自动下载可以点一下Maven界面的同步/更新按钮。(查找依赖点这里:传送门。怎么查找依赖可以看看博客后边的仓库使用笔记)
下边是Javaweb开发可能会用到的依赖:(dependencies标签放在project标签内,project为最外层标签)
1 |
<dependencies> |
依赖junit,用于单元测试。方法使用注解@Test,可以直接运行测试,而不通过main方法。详细笔记,点这里。
因为是使用maven模板创建的Javaweb项目,所以pom.xml文件中有很多配置,而不使用模板创建项目会很干净,见下图。
手动导入
若因为网络的原因无法自动下载所需的包,我们还可以手动导入。前提是我们已经有这些包了(可以试试把Tomcat里的lib文件夹下的包导进来试试,说不定里边有我们需要的包。下边的例子中,我把整个lib文件夹都导进来了)
导出问题
maven由于他的约定大于配置,我们之后可能会遇到我们写的配置文件无法被导出或失效的问题。例如:Java文件夹内规定来存放的是Java文件,如果我们写了XML等配置文件在里头,导出资源时maven不会将它们导出。解决方法如下,在pom文件的<build>
标签中配置resource。(详细解决办法见博客:传送门)
1 |
<build> |
目录树
在Maven界面中,有一个目录树按钮,可以生成项目中用到的jar包的关联图。
打包
项目编译:IDEA打开项目,在侧栏中展开maven工具,分别使用clean,package命令完成打包。详情见这篇笔记
可能遇到的问题
目前并未发现问题。我使用的软件版本如下:
IDEA 2020.2:
Tomcat:apache-tomcat-9.0.39
Maven:apache-maven-3.6.3
JDK1.8:jdk-8u261-macosx-x64
未能正常创建项目
使用Maven模版创建webapp项目,未能正常创建项目。Run提示框中报错,看下图:
解决办法:通过查看右侧框的错误提示,发现是自建的Maven仓库中的某个文件无效导致的。所以尝试将该文件删掉再重新创建新项目。结果问题解决。
Maven仓库的使用
在pom.xml文件的dependencies标签内导入jar依赖,maven会帮我们导入(下载)该依赖和相关的依赖。(参考前边的pom文件中的导入依赖)(当然,不通过maven,我们下载后之后添加进去也是可以的)
1 |
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> |