JAVAEE管理——Maven
Maven简介
是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的
Maven好处
-
普通的传统项目
图片.png
-
Maven项目
图片.png
依赖管理
图片.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项目目录结构
Maven的目录结构
Maven的常用命令
clean清理
clean是maven工程的清理命令,执行clean会删除target目录的内容
clean命令
Compile
Compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下
图片.png
Test
test是maven工程的测试命令,会执行src/test/java下的单元测试类
图片.png
package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包
图片.png
install 将项目发布到本地仓库
install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库
对于web工程 发布到本地仓库并没有任何作用
install
Tomcat:run 一键启动
site 生成对应的工程说明
Maven的生命周期
compile test package install
执行install的时候 compile test package都会执行
图片.png
clean的生命周期
maven对项目构建过程分为三套相互独立的生命周期。
CleanLifecycle 在进行真正的构建之前进行一些清理工作
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等
SiteLifecycle 生成项目报告,站点 发布站点
各阶段生命周期
不同的生命周期命令可以同时执行
mvn clean package
构建Maven项目 IDE:Intelij idea
创建项目
创建项目
选择maven
选择maven
填写项目信息
图片.png
添加tomcat插件
-
增加war打包
图片.png
-
添加web目录 注意 这个目录在main/webapp/
创建web目录
-
创建web资源目录
web资源
在pom.xml添加tomcat插件
pom.xml配置
项目启动配置
-
编辑配置
编辑配置
-
添加+ 选择maven
图片.png
-
配置maven命令
配置maven命令
-
配置maven仓库
配置maven仓库
-
在webapp下添加index.html
图片.png
-
启动项目
图片.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目录
图片.png
添加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的依赖,需要手动添加到依赖中