下载地址:http://maven.apache.org/download.cgi
下载完成后直接解压缩到任意目录即可。
Maven的目录结构如下所示:
MAVEN3.3以上版本需要安装JDK.17+版本。同时,需要还需要配置JAVA_HOME和MAVEN_HOME环境变量。
MAVEN_HOME的值就是Maven目录的根路径。
除此以外,建议把maven的bin目录配置到path环境变量中。
配置完成后,打开命令窗口,执行“mvn -v”命令。如果可以看到maven的版本信息,代表安装成功。
Maven仓库相当于一个文件服务器。它是用来保存jar包文件的地方。Maven项目可以从本地仓库中加载jar包,不需要手动把jar包导入到每一个项目中。
修改MAVEN_HOME/conf/settings.xml配置文件,然后查找localRepository节点,该节点就是maven本地仓库的路径。
命令格式:
mvn archetype:generate [参数列表]
参数列表:
-DarchatypeCatelog=internal # 指定从互联网上下载
-DgroupId=com.xjy.maven.quickstart # 公司域名倒写,用于区分全球的不同项目
-DartifactId=simple # 项目名
-DarchetypeArtifactId=maven-archetype-quickstart
-Dversion=0.1.1-snapshot
创建成功后,项目的目录结构如下:
src
|- main
|- java : java的源代码
|- test : 测试源码目录
pom.xml : 项目配置文件
搭建web项目与上面类似,就是把-DarchetypeArtifactId参数改为maven-archetype-webapp即可。
项目搭建后的目录结构如下所示:
src
|- main
|- webapp # web的根目录
|- WEB-INF web项目的配置目录
|- resources #web的配置文件目录
pom.xml : 项目配置文件
一个大型的项目,其构建过程主要经历了以下几个阶段:
maven简化了项目构建的繁琐工作,只需要执行一个命令就可以完成从清理,编译,测试,打包,部署的所有工作。
mvn:compile 编译命令
mvn:test 测试命令
mvn:package 打包命令
mvn:install 该命令用于将项目打包成构件,并安装到本地的maven仓库中
mvn:deploy 该命令用于把项目发布到本地仓库或服务器
maven仓库:本地仓库,中央仓库,第三方仓库。
是保存在本地磁盘上。项目使用的jar包应该优先从本地下载。
maven配置文件:
<localRepository>D:\Program Files\MvnRepolocalRepository>
供maven下载到本地仓库使用,中央仓库是由maven团队自己来维护。
https://mvnrepository.com
称为“私服”。一般是由公司内部人创建的,只提供给公司内部员工使用。
不过当我们引用外国的中央仓库网速太慢时,经常也会使用国内的第三方仓库,如阿里的:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
POM的英文全名为 Project Object Model,即项目对象模型,它是maven项目的核心配置文件。在pom文件中可以定义项目的坐标,项目依赖,项目信息,插件等等。
完整的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.entorgroupId>
<artifactId>maven-day01artifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>warpackaging>
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.1version>
<scope>providedscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<version>2.7version>
<configuration>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.2version>
<configuration>
<source>1.7source>
<target>1.7target>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
project>
每个maven过程都需要定义本过程的坐标,坐标是maven对jar包的身份定义。
定义坐标的格式:
<dependency>
<groupId>groupId>
<artifactId>artifactId>
<version>version>
<scope>scope>
dependency>
groupId:项目名,一般是公司域名的倒写
artifactId:模块名
version:产品版本号
scope:依赖范围,它的值可以是compile,test,provided,runtime,system。
如果没有指定依赖范围,默认就是compile范围。
maven仓库地址:https://mvnrepository.com/
找到后,把jar包的坐标复制粘贴到项目的pom文件中即可。
在eclipse中,鼠标右键项目名,选择maven 》 add Dependency,然后在中间的搜索框中输入关键词(比如:mysql)。输入完成后会显示与它关联的所有jar包。我们只需要选择指定版本的jar即可。(本地仓库中已存在jar包)
方式一:按照近者优先和最后声明优先原则
方式二:依赖排除
可以在dependency节点下指定exclusions节点,该节点可以配置不需要依赖的项目。
<exclusions>
<exclusion>
<groupId>groupId>
<artifactId>artifactId>
exclusion>
exclusions>
方式三:锁定版本
锁定版本后,maven只会加载指定版本的jar包
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.1.9.RELEASEversion>
dependency>
dependencies>
dependencyManagement>
锁定版本后,配置文件就无需再指定版本信息。
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
dependency>
pom.xml
<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.0modelVersion>
<groupId>com.lmcgroupId>
<artifactId>MavenTestartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>warpackaging>
<name>MavenTest Maven Webappname>
<url>http://www.example.comurl>
<properties>
<spring.version>5.1.9.RELEASEspring.version>
<junit.version>4.9junit.version>
<mybatis.version>3.4.6mybatis.version>
<mysql.version>5.1.13mysql.version>
<mybatis-spring.version>1.3.2mybatis-spring.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.7maven.compiler.source>
<maven.compiler.target>1.7maven.compiler.target>
properties>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-indexerartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-instrumentartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jmsartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webfluxartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-websocketartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>aopalliancegroupId>
<artifactId>aopallianceartifactId>
<version>1.0version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-messagingartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>${mybatis.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>${mybatis-spring.version}version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.13version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.8version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.8version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.8version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.4version>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1.1version>
dependency>
<dependency>
<groupId>taglibsgroupId>
<artifactId>standardartifactId>
<version>1.1.2version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
dependencies>
<build>
<finalName>MavenTestfinalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<version>2.7version>
<configuration>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.2version>
<configuration>
<source>1.7source>
<target>1.7target>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skipTests>trueskipTests>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.plugingroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>2.1version>
<configuration>
<skip>trueskip>
configuration>
plugin>
<plugin>
<artifactId>maven-clean-pluginartifactId>
<version>3.1.0version>
plugin>
<plugin>
<artifactId>maven-resources-pluginartifactId>
<version>3.0.2version>
plugin>
<plugin>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.0version>
plugin>
<plugin>
<artifactId>maven-surefire-pluginartifactId>
<version>2.22.1version>
plugin>
<plugin>
<artifactId>maven-war-pluginartifactId>
<version>3.2.2version>
plugin>
<plugin>
<artifactId>maven-install-pluginartifactId>
<version>2.5.2version>
plugin>
<plugin>
<artifactId>maven-deploy-pluginartifactId>
<version>2.8.2version>
plugin>
plugins>
pluginManagement>
build>
project>
除此之外,还需要按照maven项目的目录结构添加文件。
src/main/java 存放java源文件
src/main/resources 存放配置文件,比如applicationContext.xml、log4j.properties等等
src/main/webapp 存放静态资源
src/main/webapp/WEB-INF/web.xml web项目的核心配置文件
如果一个系统的业务功能非常复杂,对于项目的维护难度就会增大。分模块就是把一个大型的项目按照不同的业务功能拆分成不同的子模块。每一个子模块都是一个独立的项目。子模块之间是互相独立,互不影响。
使用分模块搭建项目更加有利于项目的后期维护,提高系统的维护性。由于各个子模块之间是独立的,某个子模块的功能变更不会影响到其他子模块。
分模块搭建maven项目:
第一步:搭建一个父工程。父工程包含了所有子模块下的公共配置信息;
第二步:在父工程下创建子模块,比如web子模块、service子模块、dao子模块等等。
第三步:按照三层架构的依赖关系,为各个子模块添加依赖;
第四步:在父工程中把所有子模块聚合在一起;