Maven概念
-
Maven 是专门用于管理java项目的工具,它的主要功能有:
-
提供了一套标准化的项目结构
-
提供了一套标准化的构建流程(编译,测试,打包,发布)
-
提供了一套依赖管理机制
-
依赖管理
-
其实就是你项目所依赖的第三方资源(jar 包,插件..)
-
Maven 使用标准的坐标配置来管理各种依赖
-
只需要简单的配置就可以完成依赖管理。
-
maven 命令的编译
在mom.xml 文件打开cmd,执行命令行 mvn ...
-
Maven 常用命令
-
compile : 编译
-
clean :清理
-
test :测试
-
package:打包
-
install: 安装
-
-
IDEA 配置maven
-
在seting中搜索maven ,设置本地使用安装的Maven,并修改配置文件的路径。
-
Maven home path:D:\develop\maven\apache-maven-3.8.4
-
user stting file: D:\develop\maven\apache-maven-3.8.4\conf
-
-
依赖范围
通过设置坐标范围(scope)。可以设置对应的jar包范围作用:编译环境,测试环境,运行环境。
依赖范围 | 编译 | 测试 | 运行 | 类子 |
---|---|---|---|---|
compile | Y | Y | Y | loback |
test | -- | Y | -- | junit |
provided | Y | Y | -- | servlet-api |
rutime | -- | Y | Y | jdbc 驱动 |
system | Y | Y | -- | 存储在本地的仓库 |
import |
-
<scope> 默认值:compile
-
Build Tools ——>any changes :将自动更新
-
maven的生命周期
Maven 对项目构建的生命周期划分为三套
-
clean:清理工作
-
default:核心工作,类如编译,测试,打包,安装
-
site:产生报告,发布站点等
*同一生命周期内,执行后面的命令,前面的所有命令会自动执行
2.Maven 坐标
-
maven中的坐标是资源的唯一标识
-
使用坐标来定义项目或者引入项目中需要的依赖
-
groupld: 公司的组织名称,域名反写,类如com.ithima
-
artifactld:定义当前Maven项目名称(通常是模块名称)
-
version:定义当前的版本
3.idea 导入Maven项目
1. 将maven放入workspace中
2. 选择maven,点击+
3. 选中对应的项目的pom.xml文件,双击即可
Maven 配置
-
maven 配置本地仓库
*默认是在C盘,在D盘maven中创建一个仓库目录,然后在maven中conf文件夹--settings.xml配置本地仓库。
*<localRepository>表签中,将D盘中中的新建的目录替换,就ok
-
配置镜像仓库,
-
在setting.xml中配置阿里云的镜像仓库,
Maven 高级
分模块开发
依赖管理
-
依赖具有传递性
-
直接依赖:在当前项目中通过依赖配置建立的依赖关系
-
间接依赖:被资源的资源如果依赖其它资源,当前项目间接依赖其它资源
-
-
依赖传递冲突问题
-
路径优先:当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高。
-
声明优先:当资源在相同层级被依赖时,配置顺序靠前覆盖配置顺序靠后的。
-
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
-
可选依赖 & 排除依赖
-
可选依赖:对外隐藏当前所依赖的资源--不透明(别人用我的)
<dependency>
<groupId>org.example</groupId>
<artifactId>maven-03-ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<!--可选依赖是:隐藏当前所以依赖的资源,隐藏后对应资源将不具有依赖传递性-->
<!-- <optional>true</optional>-->
</dependency> -
排除依赖:主动断开依赖资源,被排除的资源无需指定版本--不需要,(我用别人的东西)
<dependency>
<groupId>org.example</groupId>
<artifactId>maven-04-ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖是隐藏当前资源的依赖关系-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
继承与聚合
-
聚合
-
聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
-
聚合工程:通常是一个不具有业务功能的 空 工程(仅有一个pom文件)
-
作用:
*使用聚合工程可以将多个工程进行编组,通过聚合工程进行构建,实现对所包含的模块
进行同步构建。
* 当工程中的某个模块发生变更时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。
-
-
继承
-
概念:继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程的配置信息,常见的是依赖关系的继承。
-
作用:简化配置,减少版本冲突
-
-
聚合与继承的区别
-
聚合
<!--父工程管理模块-->
<modules>
<module>../maven-02-config</module>
<module>../maven-03-domain</module>
<module>../maven-04-dao</module>
<module>../maven-05-service</module>
<module>../maven-06-exception</module>
<module>../maven-07-controller</module>
</modules>
<!--可选择的依赖,不一定要继承-->
<dependencyManagement>
<dependencies>
<!--整合测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
</dependencyManagement> -
继承
<!--继承于父工程-->
<parent>
<groupId>org.example</groupId>
<artifactId>maven-01-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../maven-01-parent/pom.xml</relativePath>
</parent>
<!--这是父工程中的可选依赖,不要写版本id-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
属性
<!--管理版本-->
<properties>
<spring.version>5.2.10.RELEASE</spring.version>
<mybatis.version>3.5.9</mybatis.version>
<mysql-connector-java.version>5.1.45</mysql-connector-java.version>
<mybatis-spring.version>1.3.0</mybatis-spring.version>
<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
<jackson-databind.version>2.9.0</jackson-databind.version>
<druid.version>1.1.12</druid.version>
<junit.version>4.12</junit.version>
<!-- <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>-->
</properties>
-
资源
<!--配置资源读取-->
<!--<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>--> -
版本管理
工程版本:
-
SHAPSHOT (快照版本):
-
项目开发过程中临时输出的版本,称为快照版本
-
快照版本会随着开发的进展不断更新
-
-
RELEASE (发布版本)
-
项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构建文件是稳定的,即便对功能的后续开发,也不会改变当前发布版本的内容,称为发布版
-
发布版本
-
alpha版
-
beta版
-
纯数字版
-
-
多环境配置与应用
-
maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境
<profiles>
<!--定义具体的环境,开发环境-->
<profile>
<!--定义环境的唯一名称-->
<id>env_dep</id>
<!--定义环境中专用的属性值-->
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/ssm_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8</jdbc.url>
</properties>
<!--设置默认开启-->
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<!--生产环境-->
<profile>
<id>env_pro</id>
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>env_test</id>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
</properties>
</profile>
</profiles>
-
使用多环境(构建过程)
mvn -P 环境定义id :mvn install -P env_test (大写的p)
-
跳过测试
-
mvn package -D skipTests
-
闪电符号:跳过所有的测试
3.精细化
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>false</skipTests>
//选择性的排除
<excludes>
<exclude>**/BookServiceTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins> -
私服
-
私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题
-
Nexus :
-
启动服务器:nexus.exe /run nexus
-
访问服务器(默认端口号8081)
分类
分三种:
-
宿主仓库(hosted):代码上传的仓库 上传
-
代理仓库(proxy):代替中央服务器的 下载
-
仓库组(group):管理仓库的 下载
宿主仓库 < 仓库组 < 代理仓库
本地仓库访问私服权限
配置位置(setting.xml)
<servers>
<server>
<id>私服仓库名name</id>
<username>用户名</username>
<password>密码</password>
</server>
</servers>
本地仓库访问私服地址
配置位置(setting.xml)
<mirrors>
<mirror>
<id>私服仓库名name</id>
<mirrorOf>*</mirrorOf>
<url>私服仓库组的路径</url>
</mirror>
</mirrors>
发布管理
<!--发布管理-->
<!-- <distributionManagement>
<repository>
<id>私服名</id>
<url>私服的仓库路径</url>
</repository>
<snapshotRepository>
<id></id>
<url></url>
</snapshotRepository>
</distributionManagement>-->
发布命令: mvn deploy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?