在这之前简单介绍一下Maven:
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
一、POM
含义:Project Object Model 项目对象模型
作用:pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置,重要程度相当于web.xml对于动态web工程。
二、Maven约定的目录结构
以IDEA中的web项目为例
src
:存放项目的源码main
: 存放主程序,包括java代码和页面jspjava
:存放java源文件resource
:存放各类框架的配置文件webapp
:存放jsp页面,包括js,css文件lib
:存放jar包test
:存放测试程序pom.xml
:maven的主要配置文件注意:在resource下的文件会自动部署到类路径下
三、Maven的坐标
在Maven的仓库中jar包位置
四、Maven的生命周期
生命周期 | 功能 |
---|---|
clear | 删除以前的编译结果,为重新编译做好准备 |
validate | 验证项目是否正确,所有必需信息是否可用 |
compile | 将 Java 源程序编译为字节码文件 |
test | 测试所有加@Test 的方法 |
package | 将编译的后文件打包,Java工程对应jar 包,Web工程对应war 包。 |
verify | 检查包名是否正确和符合规范 |
install | 将包安装在本地maven仓库,可以让其他项目依赖 |
site | 针对项目生成特定的站点 |
deploy | 发布到远程maven仓库,并提供给开发者使用 |
每一个生命周期都对应其对应的插件
在IDEA中显示如下
但是每次运行一个插件都会将其前面的插件运行一次,例如:选择package
,会运行clear
,validate
,compile
,test
,最后运行package
。
五、依赖
1,依赖的范围
scope | 编译期 | 测试期 | 运行期 | 说明 |
---|---|---|---|---|
compile | √ | √ | √ | 默认 |
test | × | √ | √ | 例如junit 包 |
provided | √ | √ | × | 例如由容器提供的servlet-api 包 |
此外还有runtime
和system
范围,用的不多。
2,依赖的原则
- 作用:解决jar包的冲突问题
1. 路径最短者优先
2. 路径相同,先声明的优先,声明指的是dependency
标签
3,依赖的排除
- 目的:有时我们需要排除不稳定的依赖的jar包
- 解决方式:
<exclusions>
<exclusion>
<groupId>commions-logging</groupId>
<artifactId>commions-logging</artifactId>
</exclusion>
</exclusions>
六、继承
- 问题:
test
范围的依赖不能传递,会分散在各个版本之中,会造成版本的不一致。 - 解决方式:将junit依赖版本同一提取到父工程中,在子工程中不指定版本,以父版本中的同一设定的为准,同时也便于修改。
- 操作步骤:
1. 创建一个Maven工程作为父工程。注意:打包的方式为pom
2. 在子工程中声明对父工程的引用,在子工程中声明父工程
3. 将子工程的坐标中与父工程坐标中的重复的内容删除
4. 在父工程中统一管理junit的依赖
5. 在子工程中删除junit依赖的版本号部分
注意:配置继承后,执行install
命令时要先安装父工程
七、聚合
- 作用:一键安装各个模块工程
- 配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块
- 使用方式:在聚合工程的pom.xml点击
install
八、war包的运行
我们把项目打包为war
包,就可以移植到别的服务器中运行了。首先把war包复制到tomcat的webapp下,
然后在控制台中执行命令catalina run
,war包就会自动解压为目录的形式。在浏览器中打上地址localhost:8080/XXX
,XXX是解压出的文件名。
九、web工程自动部署(了解)
在pom.xml中编写:
<build>
<finalName>AtguiguWeb</finalName>
<!-- 配置构建过程中需要使用的插件 -->
<plugins>
<!-- cargo是一家专门从事“启动servlet容器”的组织 -->
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.2.3</version>
<!-- 配置当前系统容器的位置 -->
<configuration>
<container>
<containerId>tomcat6x</containerId>
<home>D:\DevInstall\apache-tomcat-6.0.39</home>
</container>
<configuration>
<type>existing</type>
<home>D:\DevInstall\apache-tomcat-6.0.39</home>
<!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
<properties>
<cargo.servlet.port>8989</cargo.servlet.port>
</properties>
</configuration>
</configuration>
<!-- 配置插件在什么情况下执行 -->
<executions>
<execution>
<id>cargo-run</id>
<!-- 生命周期的阶段 -->
<phase>install</phase>
<goals>
<!-- 插件的目标 -->
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在控制台中执行,进入项目文件里,执行mvn deploy
命令自动构建。