(1) jar 包不统一,jar 包不兼容;
(2) 工程升级维护过程操作繁琐;
Maven 的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型 (POM)
POM (Project Object Model) : 项目对象模型
下载地址
Maven 属于绿色版软件,解压即安装。
bin 目录:核心运行文件;
boot 目录: 类加载器;
conf 目录:核心配置;
lib 目录:所依赖的 jar 包;
仓库分类:
(1) 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源;
(2) 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
① 中央仓库:Maven 团队维护,存储所有资源的仓库;
② 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源;
私服的作用:
① 保存具有版权的资源,包含购买或自主研发的 jar;
② 解决访问速度慢的问题;
组成:
groupId: 定义当前 Maven 项目隶属的组织名称(通常是域名反写,如 org.mybatis) ;
artifactId: 定义当前 Maven 项目名称(通常是模块名称,例如 CRM, SMS)
version: 定义当前项目版本号;
packaging: 定义当前项目的版本号;
https://mvnrepository.com/
Maven 启动后,会自动保存下载的资源到本地仓库;
conf 下 settings.xml 中:
默认位置:
<localRepository>${user.home}/.m2/repositorylocalRepository>
自定义位置:
<localRepository>D:\maven\repositorylocalRepository>
lib 下 maven-model-builder-3.6.1.jar 下的 pom-4.0.0.xml
访问速度慢:
<repositories>
<repository>
<id>centralid>
<name>Central Repositoryname>
<url>https://repo.maven.apache.org/maven2url>
<layout>defaultlayout>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
在 settings.xml 中配置阿里云镜像仓库:
<mirrors>
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
mirrors>
<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.weixinyanggroupId>
<artifactId>project-javaartifactId>
<version>
1.0version>
<packaging>jarpackaging>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
project>
Maven 构建命令使用 mvn 开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。
mvn compile #编译
mvn clean #清理
mvn test #测试 target 目录下 surefire-reports 有测试报告
mvn package #打包 只打包源程序
mvn install #安装到本地仓库
(注意要用 命令行,不要用 powershell)
格式:
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
创建 java 工程:
mvn archetype:generate -DgroupId=com.weixinyang -DartifactId=java-project
-DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot
-DinteractiveMode=false
创建 web 工程:
mvn archetype:generate -DgroupId=com.weixinyang -DartifactId=web-project
-DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot
-DinteractiveMode=false
方法 1:
方法 2:
compile 后会生成 target 目录:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
<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>
<packaging>warpackaging>
<name>web01name>
<groupId>com.weixinyanggroupId>
<artifactId>web01artifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
plugins>
build>
project>
依赖指当前项目运行所需要的 jar, 一个项目可以设置多个依赖。
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
dependencies>
依赖具有传递性:
可选依赖指对外隐藏当前所依赖的资源 - 不透明
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<optional>trueoptional>
dependency>
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本 - 不需要
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<exclusions>
<exclusion>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
exclusion>
exclusions>
dependency>
Maven 构建生命周期描述的是一次构建过程中经历了多少个事件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>2.2.1version>
<executions>
<execution>
<goals>
<goal>jargoal>
goals>
<phase>generate-test-resourcesphase>
execution>
executions>
plugin>
plugins>
build>
(1) 创建一个空模块,打包类型定义为 pom
<packaging>pompackaging>
(2) 定义当前模块进行构建操作时关联的其他模块名称
<modules>
<module>../ssm_controllermodule>
<module>../ssm_servicemodule>
<module>../ssm_daomodule>
<module>../ssm_pojomodule>
modules>
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关;
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.1.9.RELEASEversion>
dependency>
<dependencies>
<dependencyManagement>
<parent>
<groupId>com.weixinyanggroupId>
<artifactId>ssmartifactId>
<version>1.0-SNAPSHOTversion>
<relativePath>../ssm/pom.xmlrelativePath>
parent>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
dependency>
dependencies>
<properties>
<spring.version>5.1.9.RELEASEspring.version>
<junit.version>4.12junit.version>
properties>
<version>${spring.version}version>
${basedir}
${version}
${settings.localRepository}
${user.home}
mvn help:system
${env.JAVA_HOME}
mvn help:system
${jdbc.url}
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resourcesdirectory>
<filtering>truefiltering>
testResource>
testResources>
<profiles>
<profile>
<id>pro_envid>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_dbjdbc.url>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>dep_envid>
<properties>
<jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_dbjdbc.url>
properties>
profile>
profiles>
mvn 指令 -P 环境定义id
例如:
mvn install –P pro_env
mvn 指令 -D skipTests
<plugin>
<artifactId>maven-surefire-pluginartifactId>
<version>2.22.1version>
<configuration>
<skipTests>trueskipTests>
<includes>
<include>**/User*Test.javainclude>
includes>
<excludes>
<exclude>**/User*TestCase.javaexclude>
excludes>
configuration>
plugin>
nexus /run nexus
http://localhost:8081
<servers>
<server>
<id>weixinyang-releaseid>
<username>adminusername>
<password>adminpassword>
server>
<server>
<id>weixinyang-snapshotid>
<username>adminusername>
<password>adminpassword>
server>
servers>
<mirrors>
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
<mirror>
<id>nexus-weixinyangid>
<mirrorOf>*mirrorOf>
<url>http://localhost:8081/repository/maven-public/url>
mirror>
mirrors>
<distributionManagement>
<repository>
<id>weixinyang-releaseid>
<url>http://localhost:8081/repository/weixinyang-release/url>
repository>
<snapshotRepository>
<id>weixinyang-snapshotid>
<url>http://localhost:8081/repository/weixinyang-snapshot/url>
snapshotRepository>
distributionManagement>
mvn deploy