在 Eclipse 里使用 Maven :
通常,创建一个简单 Maven 项目目录相对完整,若需额外的文件目录自己手动创建就好了,不推荐使用模板创建maven项目
一. 在 Eclipse 里创建web工程
创建好之后 会有一点小错误(缺少 web.xml ),需要配置之后报错就会消失
生成的 Maven 工程里没有 Tomcat 的运行环境
Eclipse 解决办法:在 BulidPath 里添加
Maven 解决办法:在 pom.xml 配置依赖包servlet 和 jsp-api 注意 provided
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
provided
项目结构:
二. pom.xml 的基本了解
Maven里的配置文件主要就两个: settings.xml , 和 pom.xml
settings.xml: 主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;
pom.xml:主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。
1. 基础配置:
4.0.0
cn.jq.maventest
maventest
0.0.1-SNAPSHOT
war
javax.servlet
javax.servlet-api
3.1.0
provided
2. scope 的分类:
scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围,不常用,通过其他可以代替)
compile:默认是compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。主程序有效, 测试程序有效, 要打包, 要部署
test:表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。主程序无效, 测试程序有效, 不要打包, 不部署, 比较典型的如junit。
runntime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。
provided:意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。主程序有效, 测试程序有效, 不被打包, 不要部署
system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
scope的依赖传递A依赖B,B依赖C。当前项目为A,只当B在A项目中的scope,那么c在A中的scope是如何得知呢?
当C是test或者provided时,C直接被丢弃,A不依赖C;(排除传递依赖)
否则A依赖C,C的scope继承与B的scope
3. properties 标签在 pom.xml 定义一些常量, 方便管理,通过 el 表达式访问。
3.1.0
javax.servlet
javax.servlet-api
${maven.servlet.version}
provided
三. 在 Eclipse 里使用Maven命令
常用的 maven 命令如下:
Maven命令列表
mvn –version
显示版本信息
mvn clean
清理项目生产的临时文件,一般是模块下的target目录
mvn compile
编译源代码,一般编译模块下的src/main/java目录
mvn package
项目打包工具,会在模块下的target目录生成jar或war等文件
mvn test
测试命令,或执行src/test/java/下junit的测试用例.
mvn install
将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy
将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn site
生成项目相关信息的网站
mvn eclipse:eclipse
将项目转化为Eclipse项目
mvn dependency:tree
打印出项目的整个依赖树
mvn archetype:generate
创建Maven的普通java项目
mvn tomcat:run
在tomcat容器中运行web应用
mvn jetty:run
调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用
注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。