JAVAEE管理——Maven
Maven简介
是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的
Maven好处
-
普通的传统项目
图片.png
-
Maven项目
图片.png
依赖管理

Maven的好处
依赖管理:就是对项目依赖的jar包的统一管理 可以节省空间
一键构建
可以跨平台
应用于大型项目 可以提高开发效率
Maven构建
-
下载安装
图片.png
-
maven的核心文件 maven/apache-maven-3.5.4/conf/settings.xml
核心文件
Maven的三种仓库
本地仓库 自己维护
配置本地仓库需要修改setting.xml文件
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository 默认本地仓库
<localRepository>/path/to/local/repo</localRepository>
-->
> default 默认的本地仓库
远程仓库 公司维护
中央仓库 maven团队维护
Maven的目录结构


Maven的常用命令
clean清理
clean是maven工程的清理命令,执行clean会删除target目录的内容

Compile
Compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下

Test
test是maven工程的测试命令,会执行src/test/java下的单元测试类

package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包

install 将项目发布到本地仓库
install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库
对于web工程 发布到本地仓库并没有任何作用

Tomcat:run 一键启动
site 生成对应的工程说明
Maven的生命周期
compile test package install
执行install的时候 compile test package都会执行

clean的生命周期
maven对项目构建过程分为三套相互独立的生命周期。
CleanLifecycle 在进行真正的构建之前进行一些清理工作
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等
SiteLifecycle 生成项目报告,站点 发布站点

不同的生命周期命令可以同时执行
mvn clean package
构建Maven项目 IDE:Intelij idea
创建项目

选择maven

填写项目信息

添加tomcat插件
-
增加war打包
图片.png
-
添加web目录 注意 这个目录在main/webapp/
创建web目录
-
创建web资源目录
web资源
在pom.xml添加tomcat插件

项目启动配置
-
编辑配置
编辑配置
-
添加+ 选择maven
图片.png
-
配置maven命令
配置maven命令
-
配置maven仓库
配置maven仓库
-
在webapp下添加index.html
图片.png
-
启动项目
图片.png

maven坐标定义
每个maven工程都需要定义本工程的坐标,坐标是maven对jar包身份定义:
<!--项目名称,定义为组织名+项目名 类似包名-->
<groupId>cn.probuing.maven</groupId>
<!--模块名称-->
<artifactId>maven_tx</artifactId>
<!--当前项目版本号-->
<version>1.0-SNAPSHOT</version>
<!--打包类型-->
<packaging>war</packaging>
* jar:执行package会打成jar包
* war:执行package会打成war包
* pom:用于maven工程的集成,通常父工程设置为pom
maven与Struts2整合
使用struts2与maven传递一个客户id 跳转页面
创建项目

设置packaging 为war
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.probuing.crm</groupId>
<artifactId>mavenProj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
</project>
添加web目录

添加tomcat插件
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/mavssh</path>
</configuration>
</plugin>
</plugins>
添加依赖 管理jar包
<!--依赖管理-->
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.24</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
为避免包冲突,添加servlet-api.jar和jsp-api.jar 注意选择scope为provided
配置struts2
- struts.xml src/main/resources/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置常量 -->
<!-- 字符集 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 开发模式 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 主题 -->
<constant name="struts.ui.theme" value="simple"></constant>
<!-- 扩展名 -->
<constant name="struts.action.extension" value="action,,"></constant>
<!-- 通用package -->
<package name="customer" namespace="/" extends="struts-default">
<action name="customerAction" class="cn.probuing.action.CustomerAction">
<result name="success">/info.jsp</result>
</action>
</package>
</struts>
- web.xml 核心过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
编写action
public class CutomerAction extends ActionSupport {
private Long custId;
public Long getCustId() {
return custId;
}
public void setCustId(Long custId) {
this.custId = custId;
}
public String findById(){
return SUCCESS;
}
}
- jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
Hello Every body it's from maven
</body>
</html>
依赖范围
Compile
编译时需要,测试时需要,运行时需要,打包时需要
Provided
编译时需要,测试时需要,运行时不需要,打包时不需要
Runtime
编译时不需要,测试时需要,运行时需要,打包时需要
Test
编译时不需要,测试时需要,运行时不需要,打包也不需要
整合框架时依赖冲突的解决
在我们整合框架的时候,在集成了多个框架的时候可能会出现依赖冲突的情况,我们解决依赖冲突主要有以下几个方式
第一声明优先原则
优先声明的会先进行配置,如下配置中Maven会集成spring-beans-4.2.4的依赖库
<dependencies>
<!-- spring-beans-4.2.4 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- spring-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
路径优先原则
- 自己指定jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
- 添加排除
使用<exclusion>标签可以指定排除冲突的库
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
版本锁定原则
<!--定义变量配置-->
<properties>
<spring.version>4.2.4.RELEASE</spring.version>
<hibernate.version>5.0.7.Final</hibernate.version>
<struts.version>2.3.24</struts.version>
</properties>
<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
分模块开发
依赖传递

依赖关系
- 父工程
- 模块工程
- 依赖模块工程的模块工程
在这里需要注意的是 对于有些工程 定义的 依赖的生命周期为scope为test的依赖,需要手动添加到依赖中