一个项目管理工具,能够帮助你的项目构建以及部署加快。
maven的上下一体
1.Maven 简介
2.Maven 的安装和配置
3.Maven 仓库
4.Maven 入门
5.Maven 核心概念解析
6.Maven 的依赖管理
7.Eclipse 中创建 Maven JAVEWEB 项目
8.Maven 的继承
9.Maven 的聚合
maven简单的说是一个项目集管理工具
一个项目里面包含什么内容,无非是java代码,资源,甚至是相关的一些jar包,如何摆放
多个项目之间是否存在关系,是否需要相互照应,是否能够将项目直接放置在tomcat中,那么这些都需要靠maven来进行操作
maven的简介说明
一个普通的web项目需要在lib中引入大量的jar包,maven可以帮助我们添加需要的jar包
一个工具包可能需要依赖其它的jar包作为支撑,比如使用log4j的时候需要依靠通用的common-io包,maven可以帮助的项目做依赖jar包
一些jar包有着不同的版本,每个项目可能需要的jar包不一样,从哪里来。maven提供了一个中央仓库供大家下载
多模块拆分,以前常见使用package的方式进行分层能够解决基本的问题,但随着项目越来越大,那么我们要进行细化,直接使用package分并不够。那么通过我们可以通过maven进行拆分,并且统一进行管理
关于构建 (结构化的建立)(也就是有一种标准式的建立方式)
maven主要有一下几个动作
clean 清理:删除编译的内容,做好重新编译的准备
complie 编译:也就是将代码编译为class文件
test 测试:对项目中的某个模块业务进行测试,以确保的结果的准确性
report 报告:有测试完毕的情况下,有对应的报告生成
package 打包:将一个文件或者多个进行jar或者war包打包
install 安装:将jar包或者war包安装到本地仓库中
deploy 部署:将war包部署到服务器容器中
maven的安装与配置
maven下载地址:http://maven.apache.org/download.cgi
windows配置环境变量(注意:可能需要设置JAVA_HOME变量)
mac中加入 bash_profile (可执行的配置文件)
cat ~/.bash_profile
#add maven_home
MAVEN_HOME=/Users/Yun/Documents/maven/apache-maven-3.3.9
PATH=
P
A
T
H
:
PATH:
PATH:MAVEN_HOME/bin
export MAVEN_HOME
使用mvn -v 命令查看maven版本 (验证是否安装成功)
修改使用maven下载jar包存放仓库的位置(路径自行选择)
在config-setting.xml中 更改/Users/Yun/Documents/maven/repo
设置镜像仓库(maven默认仓库假设在美国,国内有锁,下载十分缓慢)
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
后期为了保证项目统一的jdk版本在中加入(JDK更改即可)
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
maven仓库的概念
本地仓库 (本地maven存放的文件)
远程仓库 (来自五湖四海汇集到一起)
私服 (开发中,都有自己搭建的私服,其实就是私有仓库)
中央仓库和镜像 中央仓库只有一个,镜像是中央仓库的克隆,用于分担中央仓库的压力
maven入门
eclipse中配置maven路径(默认是自动识别)
加载maven配置文件
构建一个mavenproject(勾选创建一个简单的maven项目)
目录结构如下:
观察一下pom.xml(自行加入junit)
<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>com.wwj</groupId>
<artifactId>maven001</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在src/main/java 以及 src/test/java中
public class HelloMaven {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
import static org.junit.Assert.*;
import org.junit.Test;
import com.wwj.hell.HelloMaven;
public class HelloMavenTest {
@Test
public void testHello(){
HelloMaven hello = new HelloMaven();
String results = hello.sayHello("wwj");
//用于判别内容是否一致
assertEquals("Hello wwj!",results);
}
}
切换到项目根目录下执行
mvn compile (注意观察info)
mvn clean (注意观察info)
mvn test (注意观察info)
会新增一个测试报告
mvn package (注意观察info) (compile->test->package)
Maven 核心概念解析(pom,目录结构,坐标)
pom.xml文件对整体项目文件的管理。认知maven就是认知pom.xml文件
src/main/java 为项目的逻辑代码存放地 src/main/resource 为项目资源配置文件,同理测试目录为测试文件与资源的存放地
target为compile存放文件的位置
坐标主要的目的一个项目能从maven仓库中找到需要的内容,而这个内容需要有一个标识
<groupId>com.wwj</groupId>
<artifactId>maven001</artifactId>
<version>0.0.1-SNAPSHOT</version>
执行 mvn install (观察info) 相当于打包jar包放置与本地仓库中
Maven 的依赖管理
依赖管理 中有一个标签叫 , scope有3个选项compile,test,provided
compile 编译 主要为项目主业务代码 从前到后使用
test 测试 主要提供给测试业务代码 仅仅只在test使用
provided 可提供的 也就是从编译到测试使用,可以理解为仅仅只在项目中使用,部署后由容器本身提供
1.项目依赖传递概念
(1). 假如有Maven项目A,项目B依赖A,项目C依赖B。那么我们可以说 C依赖A。也就是说,依赖的关系为:C—>B—>A。 那么我们执行项目C时,会自动把B、A都下载导入到C项目的jar包文件夹中。这就是依赖的传递性。并且C对B的支撑要达到complie级别,A才能够可见到C. 其余级别不支持
(2). 如果C现在不要A (使用exclusion)
<exclusions>
<exclusion>
<!--被排除的依赖包坐标-->
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>0.0.1</version>
</exclusion>
</exclusions>
统一版本管理
<properties>
<wwj.junit>4.0</wwj.junit>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${wwj.junit}</version>
<scope>test</scope>
</dependency>
</dependencies>
Eclipse 中创建 Maven JAVEWEB 项目 (勾选简单的maven项目
项目右键勾选属性:
maven的继承 (多个子项目都需要某些依赖, 就可以把子项目共同的依赖抽取到父项目中,子项目通过继承得到这些依赖)
构建父项目(打包方式为pom)
父项目使用 dependencyManagement 标签来管理,optional表示子 pom 无论如何都不能继承(已经失效)
<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>com.wwj</groupId>
<artifactId>maven003</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<!-- 子 pom 可以继承 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子项目使用父项目的依赖
<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>com.wwj</groupId>
<artifactId>maven004</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<!-- 父项目坐标 -->
<groupId>com.wwj</groupId>
<artifactId>maven003</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 父项目 pom 文件路径 -->
<relativePath>../maven003/pom.xml</relativePath>
</parent>
<dependencies>
<!-- 不需要版本, 会从父项目继承, 如果指定版本就是代表不是来自父 pom 而是子 pom 自己的. -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
</project>
9.maven聚合 (将功能模块拆分,最常见的我们整合ssm的时候会将service和dao进行拆分,当然也可以以项目的方式)
创建父模块(父模块一般承担聚合模块和统一管理依赖的作用,没有实际代码和资源文件) (打包方式为pom.xml)
右键父项目创建子模块module
分别观察到父亲管理那些模块,儿子的父亲是谁
父模块做统一管理
<properties>
<wwj.json>1.2.47</wwj.json>
</properties>
<dependencyManagement>
<dependencies>
<!-- 子 pom 可以继承 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${wwj.json}</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块直接进行依赖
<dependencies>
<!-- 子 pom 可以继承 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
切换到maven父项目执行mvn install (观察info)