一、maven基础
4. maven的常用命令:
dos窗口进入项目pox.xml所在目录,执行命令:mvn tomcat:run
4.1. maven 常用命令
- 1.clean:清除项目根目录下target文件夹内所有内容
- 2.compile:编译,将项目中的java文件编译为class文件
-
3.test:单元测试,将项目根目录下src/java目录下的单元测试类都会执行
单元测试类名要求:***Test.java -
4.package:打包
web project ==>war包
java project ==>jar包
将项目打包,打包项目根目录下target 目录 -
5.install:安装
本地多个项目公用一个jar包,打包到本地仓库
4.2. maven项目的生命周期
- 1.CleanLifeCycle:清理生命周期:clean
- 2.defaultLifeCycle:默认生命周期:compile、test、package、install、deploy
- 3.siteLifeCycle:站点生命周期:site
三套生命周期相互独立,互不影响。
在一套生命周期内,执行后面的命令,前面操作会自动执行。
4.3 概念模型
5. maven整合web项目
5.1. 配置maven插件
- a.新版的eclipse自带maven插件
-
b.配置maven程序
-
c.配置userSetting:
-
d.构建索引
注意配置本地仓库地址
5.2. maven整合Servlet
创建好的web项目,错误:
-
a.web.xml缺失
b.jdk编译版本为1.5,在pom.xml中添加插件
<!-- 添加项目jdk编译插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
-
c.创建一个Servlet,servlet编译报错,原因:缺失servlet-api-**.jar包
-
d.查找依赖
5.3. 依赖的范围
添加依赖范围:默认是compile
provided:运行部署到tomcat不再需要。
-
问题:如果将servlet-api.jar设置为compile,打包之后包含servlet-api.jar,war包部署到tomcat后跟tomcat中存在的servlet-api.jar包冲突。导致运行失败。
解决:修改依赖范围
依赖范围 | 对于编译classpath有效 | 对于测试classpath有效 | 对于运行时classpath有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-corer |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驱动 |
system | Y | Y | - | 本地的,Maven仓库之外的类库 |
- 总结:如果使用到tomcat自带jar包,将项目中依赖作用范围设置为:provided
5.4 运行、调试项目
5.5maven整合struts2
- 通过工具生成web.xml及添加编译jdk版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<!-- 手动设置详细信息 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
- 添加struts2的依赖
添加核心包,自动添加其他依赖包
- 添加struts2的依赖
- 创建struts.xml
- 创建action类继承ActionSupport类
- 在web.xml中配置Struts2框架核心过滤器
<!-- 配置Struts2框架核心过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern> <!-- .action或者空白结尾的会经过过滤器 -->
</filter-mapping>
-
- 编写action中的方法
//url http://localhost:8080/maven-struts2/customerAction_test.action public String test() throws Exception { System.out.println("成功进入CustomerAction中的test方法"); return SUCCESS; }
-
7.在struts.xml中配置action
<package name="demo" namespace="/" extends="struts-default"> <action name="customerAction_*" class="com.zhougl.web.action.CustomerAction" method="{1}"> <result name="success">/index.jsp</result> </action> </package>
二、Maven实战
1.传递依赖冲突解决
1.1Maven自己调解原则
1.1.1 第一声明优先原则
谁先定义就用谁优先传递依赖
1.1.2 路径近者优先原则
直接依赖级别高于传递依赖。