Maven是一个项目资源管理工具
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶(phase)中插件(plugin)目标(goal)的逻辑
Maven优点:
1.解决项目中jar包需要手动导入,一旦jar包资源过多,容易造成遗漏
2.解决项目导包,比较麻烦
中央仓库(Central Repository),
官方维护, 存放所有相关的jar包(包含各个版本)
本地仓库(Local Repository),
maven项目都是从本地仓库加载jar包的
镜像仓库(Mirror Repository),
国内有能力的组织(机构)搭建的仓库, 这个仓库就是将中央仓库中的所有内容复制了一份存起来.
jar包定位:坐标,三部分构成
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>E:/RepositorylocalRepository>
<mirrors>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
<profiles>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
profiles>
settings>
类型 | 对应项目 | 描述 |
---|---|---|
jar | java工程 | 目最终被打包为jar包 |
war | wen工程 | 项目被打包为war包 |
pom | 逻辑工程 | 父工程必须是pom类型的工厂,pom工程中不写java代码,管理子工程 |
指依赖的jar包作用范围
compile:不写默是compile,指Maven项目依赖的jar包,在编译、测试、运行有效,由于运行时需,依赖会被打包
示例
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.20version>
dependency>
provided:Maven项目依赖的jar包,只在编译和测试时需要,在运行时不需要
比如:servlet api/jsp-api 被 tomcat 容器提供。
示例
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
runtime:Maven项目依赖的jar包,只在运行和测试时需要,在编译时不需要
比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
test:指依赖的jar包,在编译和运行时都不需要,只在测试编译和测试运行阶段可用
比如:junit。由于运行时不需要所以 test范围依赖不会被打包
实例
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>${junit-version}version>
<scope>testscope>
dependency>
system:依赖于provided类似,但必须指定jar文件路径,指定systemPath磁盘路径,不推荐使用
清除maven项目下的target目录中的class和本地仓库中已打包的文件
验证工程是否正确,所有需要的资源是否可用
即编译项目中的java文件,并存放在项目的编译目录
即运行项目中的测试用例文件,如果测试用例未通过,也会打包失败,这里test过程可以在pom中通过配置跳过。
将本地编译好的文件打包为war 或者jar
运行任何检查,验证包是否有效且达到质量标准
将打包的代码存放到本地maven仓库,可供本地其它项目依赖使用
生成项目报告,站点,发布站点
将打包在本地仓库中的项目发布到服务器,供他人依赖使用
clean
package
install
test
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P9m2dpqD-1609420321238)(.\img\Maven指令生命周期.png)]
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
依赖关系指一个项目依赖另一个项目资源,指项目之间的调用
项目A中会使用项目B中的资源,我们会将项目B的包导入到项目A中使用那么项目A和项目B之间就是依赖关系。项目A依赖项目B
① 创建项目A完成功能开发
② 在项目A的pom文件中配置项目B或者其他第三方资源的资源坐标
③ 在项目A中正常调用项目B的资源即可。
依赖jar包有相同情况,路径不同间接依赖中maven采用的是路径最短者优先
路径相同间接依赖中maven 采用的是依赖定义顺序从上到下
<dependency>
<groupId>com.testgroupId>
<artifactId>05maven_gx_ylaartifactId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
exclusion>
exclusions>
dependency>
子项目可以直接调用父项目资源,父项目必须是pom类型,
子项目通过父项目pom.xml获得资源,指的是pom资源继承,不是项目功能代码继承
① 创建两个maven项目,项目parent和项目child,项目paren是pom类型,没有代码
② 建立两个项目之间的继承关系
在子项目中的pom.xml文件中使用parent标签,并声明父项目的资源坐标即可
③ 观察在父项目中配置资源,在子项目中是否会自动加载相关资源
注意:
(1) maven项目的继承关系中的父项目要创建为pom类型
(2) 继承关系中的maven项目是相互独立的,本质就是两个项目
<parent>
<groupId>com.testgroupId>
<artifactId>06maven_gx_jcpomartifactId>
<version>1.0-SNAPSHOTversion>
parent>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
dependencies>
快速构建,将一个Maven项目,划分为多个子项目。前提是子项目必须继承父项目
① 创建一个maven pom类型项目
② 在pom项目下创建多个 module
父项目
<groupId>com.testgroupId>
<artifactId>07maven_gx_jhartifactId>
<version>1.0-SNAPSHOTversion>
<modules>
<module>jh_pojomodule>
<module>jh_utilmodule>
modules>
<packaging>pompackaging>
子项目
<parent>
<artifactId>07maven_gx_jhartifactId>
<groupId>com.testgroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>jh_pojoartifactId>
继承目的是减少重复配置,是一种单向的,子项目继承父项目配置,父项目不能访问子项目
聚合目的是快速构建项目,一个项目拆分成多个项目,是一种双向的,前提必须是继承。子项目继承父项目,父项目可以访问子项目
将项目部署到服务器,在服务器运行
① 使用maven将项目整体打包到本地仓库中
② 在idea中找到war类型的web项目将其target文件夹下的war包上传到其他的tomcat中,然后启 动其他的tomcat
③ 在本地的浏览器中访问另一个中的web项目
注意:访问项目的虚拟项目的名字为tomcat下的war包解压后的文件夹的名字
远程上传项目部署到服务器
tomcat tomcat-user.xml文件 配置登录账号
<role rolename="manager-gui"/>
<role rolename="manager-script "/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
启动tomcat服务器
在maven项目中配置pom.xml文件,tomcat7-maven-plugin 插件远程上传
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<url>http://192.168.1.75:8080/manager/texturl>
<username>adminusername>
<password>adminpassword>
<path>/flowerpath>
<update>trueupdate>
configuration>
plugin>
tomcat7-maven-plugin 插件使用deploy名,远程部署
访问tomcat服务器中部署好的项目
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.1version>
<scope>providedscope>
dependency>
dependencies>
<properties>
<mysql-version>8.0.17mysql-version>
properties>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql-version}version>
dependency>
dependencies>
<dependency>
<groupId>com.testgroupId>
<artifactId>05maven_gx_ylaartifactId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
exclusion>
exclusions>
dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.11version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.2version>
dependency>
<dependency>
<groupId>com.google.code.gsongroupId>
<artifactId>gsonartifactId>
<version>2.8.5version>
dependency>
dependencies>
dependencyManagement>
<dependency>
<groupId>com.testgroupId>
<artifactId>05maven_gx_ylaartifactId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
exclusion>
exclusions>
dependency>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
dependencies>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<url>http://192.168.1.75:8080/manager/texturl>
<username>adminusername>
<password>adminpassword>
<path>/flowerpath>
<update>trueupdate>
configuration>
plugin>
plugins>
build>
引入tomcat插件部署不使用远程热部署
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>8080port>
<path>/flowerpath>
configuration>
plugin>
<username>adminusername>
<password>adminpassword>
<path>/flowerpath>
<update>trueupdate>
configuration>
plugin>
plugins>
build>
引入tomcat插件部署不使用远程热部署
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>8080port>
<path>/flowerpath>
configuration>
plugin>