Maven
项目对象模型(POM)
,可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
通过使用Maven
,我们可以便捷的使用一段代码来引入jar
包,从而不再为杂乱的引用而烦恼,同时远离jar
包各种报错的折磨。
创建项目
新建项目
选择Maven
→
org.apache.maven.archetypes:maven-archetype-webapp
→
maven-archetype-webapp:RELEASE
→ NEXT
此处的webapp
千万不能选错,必须要选择apache.maven
下的webapp
,否则会出现严重问题!(我会说我在这里卡了3个小时嘛)
## 项目命名 - Name : 项目名 - Location :
项目路径 - GroupId :
第一段为域,第二段为公司名/组名,最后一段一般为项目名;域又分为org 、com 、cn 等等许多,其中org 为非盈利组织,com 为商业组织
- Artifactid :
不带版本号的项目名,要求使用小写字母,且没有特殊符号 -
Version : 版本,默认的SNAPSHOT 代表快照 ![]() |
||
---|---|---|
## 配置Maven - Maven home directory :
Maven 的安装路径,这里笔者已经下载安装好Maven (idea 其实已经集成好Maven ,因此也可以使用自带的Maven )
- User setting file :
配置文件,此处可以使用安装目录下自带的Maven/conf/settings.xml ,也可以自己编写。
- Local repository :
仓库目录,可以自己设定jar 包的下载位置 ![]()
![]() |
配置Tomcat服务器(使用本地文件)
点击右上角的ADD CONFIGURATION
→ 点击左上角的+号 →
Tomcat Server
→ Local
,新建一个Tomcat配置。
点击右下角的
FIX
,选择xxx_war_exploded
.
war exploded
模式是将WEB
工程以当前文件夹的位置关系上传到服务器,即直接把文件夹、jsp
页面
、classes
等等移到Tomcat
部署文件夹里面,进行加载部署。
如果没有xxx_war_exploded
选项,在Settings
→
Build, Execution, Deploy
→ Build Tools
→
Maven
→ Importing
→
勾选Import Maven projects automatically
最后,点击运行,web
项目就成功打开啦。(项目已经为我们自动生成了一个带有Hello World!
的index.jsp
)
----
引入jar包
使用jetty插件搭建服务器
关于Tomcat和Jetty
使用外部的Tomcat
程序作为服务器固然可行,然而在使用外部的Tomcat
时,我们在向Maven
中引入jar
的同时,也要在Tomcat/lib
中加入jar
,这使得项目的构建变得麻烦,违背了Maven
便于管理的初衷。
于是,Maven
给我们提供了更轻量便捷的方式——使用内嵌的服务器插件。Maven
支持内嵌Tomcat
,所谓内嵌,即我们不需要额外下载Tomcat
,只要引入依赖即可使用,故免去了修改外部文件的麻烦。
在本文中,笔者使用Jetty
插件作为演示,Maven
同样可以内嵌Jetty
,Jetty
与Tomcat
都可以搭建服务器,但是Jetty
更加轻量化和灵活,适合小型项目。
添加plugin项
找到pom.xml
,pom.xml
主要描述了项目的maven
坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses
,以及其他所有的项目相关因素,是项目级别的配置文件。
在pom.xml
内<build>
→pluginManagement
→
<plugins>
中加入以下内容:
groupId
: 组名artifactId
: jar名version
: 版本scanIntervalSeconds
: 扫描时间,即多久扫描一次文件是否变动,若有变动就会修改项目port
: 端口号(可以自定义,不过为了不与Tomcat
冲突,一般不设为8080)contextPath
: 根目录,设为/
即没有额外的目录,该配置的根目录为http://localhost:8080/
1 | <plugin> |
配置好之后Maven
就会自动下载jar
,并更新到项目中。
其实关于公司名、jar
名、版本号,我们并不需要自己书写,我们可以通过查询:https://mvnrepository.com/获取对应的信息。
例如搜索jetty
,选择对应的版本号,就可以得到: ### 配置命令行
接下来我们来配置启动
jetty
插件的命令行,同样点击右上角 →
选择Edit Configurations
→ 在左边栏找到Maven
→
在Command line
中输入clean jetty:run
,并将配置命名。
这样做之后,每次运行该配置,就相当于在命令行中输入: 1
2mvn clean
mvn jetty:runJetty
服务器。 运行效果:
案例:引入jstl包
我们再来演示一下在Maven
中使用jstl
的方法,以体现其便捷。
添加dependency项
同样,在pom.xml
内<dependencies>
标签内引入,这次不是plugin
,dependencies
代表依赖,plugin
则是插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
等待jar
下载配置完成,我们就可以直接使用jstl
了,是不是很方便呢?我们来试一下。
首先引入标签库,设置前缀,然后尝试一下forEach
循环语句:
1
2
3
4
5
6
7
8
9<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
<h2>Hello World!</h2>
<c:forEach var="i" begin="1" end="10">
${i}<br>
</c:forEach>
</body>
</html>
我们本想得到从1到10的循环,此处显示的却是10个
el
表达式,难道jstl
的引入有问题?显然不是,如果jstl
有问题,我们连循环语句都无法使用。
启用el表达式
显然,这里的问题不是jstl
,而是el
表达式,在Maven
环境下,el
表达式默认是不启用的,浏览器会将el
表达式作为普通的字符串处理。
为了启用el
表达式,我们需要在jsp
的开头添加:
1
<%@ page isELIgnored="false" %>
el
表达式,这样就可以正常运行啦: