Maven
Author:Shine
Version:9.0.2
一、引言1.1 项目管理问题1.1.1 繁琐1.1.2 复杂1.1.3 冗余1.2 项目管理方案二、介绍三、Maven安装3.1 下载Maven3.2 Maven安装3.2.1 解压3.2.2 环境变量3.2.3 测试四、Maven配置4.1 本地仓库4.2 JDK配置五、仓库5.1 概念5.2 仓库分类5.3 本地仓库5.4 远程仓库5.4.1 中央仓库5.4.2 公共仓库【重点
】5.4.3 私服【了解】六、Idea-Maven6.1 在Idea中关联Maven6.2 创建Maven项目6.2.1 新建项目6.2.2 指定项目名6.2.3 项目位置6.2.4 项目结构6.2.5 项目类型6.3 导入依赖jar6.3.1 查找依赖6.3.2 导入依赖6.3.3 同步依赖6.4 创建web项目6.4.1 打包方式6.4.2 web依赖6.4.3 webapp目录6.4.4 定义Servlet和Jsp6.5 部署web项目一:外置tomcat二:tomcat插件6.6 依赖生命周期6.6.1 概念6.6.2 使用方式6.6.3 生命周期详解七、Maven指令7.1 命令行7.2 Maven面板八、私服8.1 概念8.2 架构8.3 Nexus安装【了解】
一、引言
1.1 项目管理问题
项目中jar包资源越来越多,jar包的管理越来越沉重。
1.1.1 繁琐
要为每个项目手动导入所需的jar,需要搜集全部jar
1.1.2 复杂
项目中的jar如果需要版本升级,就需要再重新搜集jar
1.1.3 冗余
相同的jar在不同的项目中保存了多份
1.2 项目管理方案
java项目需要一个统一的便捷的管理工具:Maven
二、介绍
Maven这个单词来自于意第绪语(犹太语),意为知识的积累.
Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具。主要用来管理java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分模块开发,提高开发效率。
三、Maven安装
3.1 下载Maven
下载Maven
3.2 Maven安装
3.2.1 解压
注意: 解压文件尽量不要放在含有中文或者特殊字符的目录下。
解压后,有如下目录:
`bin:含有mvn运行的脚本`
`boot:含有plexus-classworlds类加载器框架,Maven 使用该框架加载自己的类库。`
`conf:含有settings.xml配置文件`
`lib:含有Maven运行时所需要的java类库`
3.2.2 环境变量
maven依赖java环境,所以要确保java环境已配置好 (maven-3.3+ 需要jdk7+)
maven本身有2个环境变量要配置:
`MAVEN_HOME = maven的安装目录`
`PATH = maven的安装目录下的bin目录`
3.2.3 测试
查看maven版本信息
mvn -v
四、Maven配置
4.1 本地仓库
maven的conf目录中有
<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
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- 选择一个磁盘目录,作为本地仓库 -->
<localRepository>D:\Program Files\maven\myrepository</localRepository>
4.2 JDK配置
在
内容如下:
<profiles>
<!-- 在已有的profiles标签中添加profile标签 -->
<profile>
<id>myjdk</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>
</profiles>
<!-- 让增加的 profile生效 -->
<activeProfiles>
<activeProfile>myjdk</activeProfile>
</activeProfiles>
五、仓库
5.1 概念
存储依赖的地方,体现形式就是本地的一个目录。
仓库中不仅存放依赖,而且管理着每个依赖的唯一标识(坐标),Java项目凭坐标获取依赖。
5.2 仓库分类
仓库分类如下:
仓库分类 |
---|
当需要依赖时,会从仓库中取查找,优先顺序为:
5.3 本地仓库
即在
使用过了的依赖都会自动存储在本地仓库中,后续可以复用。
5.4 远程仓库
5.4.1 中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,不用任何配置,maven中内置了中央仓库的地址。
其中包含了绝大多数流行的开源Java构件。
https://mvnrepository.com/ 可以搜索需要的依赖的相关信息(仓库搜索服务)
5.4.2 公共仓库【重点
】
除中央仓库之外,还有其他远程仓库。 比如aliyun仓库(http://maven.aliyun.com/nexus/content/groups/public/)
中央仓库在国外,下载依赖速度过慢,所以都会配置一个国内的公共仓库替代中央仓库。
<!--setting.xml中添加如下配置-->
<mirrors>
<mirror>
<id>aliyun</id>
<!-- 中心仓库的 mirror(镜像) -->
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<!-- aliyun仓库地址 以后所有要指向中心仓库的请求,都会指向aliyun仓库-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
5.4.3 私服【了解】
公司范围内共享的仓库,不对外开放。
可以通过 Nexus来创建、管理一个私服。
六、Idea-Maven
6.1 在Idea中关联Maven
在idea中关联本地安装的maven,后续就可以通过idea使用maven,管理项目啦。
在全局设置中,关联Maven |
---|
6.2 创建Maven项目
6.2.1 新建项目
新建项目,要选择
如下选项 |
---|
6.2.2 指定项目名
设置项目名 |
---|
6.2.3 项目位置
项目位置如下 |
---|
6.2.4 项目结构
src/main/java 存放源代码,建包,放项目中代码(service,dao,User,....)
src/main/resources 书写配置文件,项目中的配置文件(jdbc.properties)
src/test/java 书写测试代码,项目中测试案例代码
src/test/resources 书写测试案例相关配置文件
目根/pom.xml (project object model) maven项目核心文件,其中定义项目构建方式,声明依赖等
项目结构如下: |
---|
6.2.5 项目类型
根据项目类型,在
<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.qf</groupId>
<artifactId>test01</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式,如果是java项目则用 jar,
如果是web项目则用war -->
<!--<packaging>war</packaging>-->
<packaging>jar</packaging>
</project>
6.3 导入依赖jar
建好项目后,需要导入需要的jar,要通过
每个构件都有自己的坐标 = groupId + artifactId + version = 项目标识 + 项目名 + 版本号
在maven项目中只需要配置坐标,maven便会自动加载对应依赖。删除坐标则会移除依赖
6.3.1 查找依赖
依赖查找服务:https://mvnrepository.com/ ,获得依赖的坐标,在maven项目中导入。
查找依赖坐标 |
---|
6.3.2 导入依赖
在项目的pom文件中,增加依赖
在项目的pom.xml文件添加依赖 |
---|
6.3.3 同步依赖
引入坐标后,同步依赖,确认导入。
窗口右下角弹窗,刷新依赖,使新加的配置被maven加载 |
---|
6.4 创建web项目
6.4.1 打包方式
pom.xml中设置
web项目打包方式为: |
---|
6.4.2 web依赖
导入
6.4.3 webapp目录
按照maven规范,新建web项目特有目录
新建如下目录和文件 |
---|
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 这是一个空白的web.xml文件模板 --> </web-app>
6.4.4 定义Servlet和Jsp
照常定义即可 |
---|
6.5 部署web项目
一:外置tomcat
1 新增Tomcat
新增Tomcat |
---|
2 部署web项目
部署web项目 |
---|
3 启动Tomcat
启动Tomcat |
---|
二:tomcat插件
在pom文件配置插件
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定端口 --> <port>8080</port> <!-- 请求路径 --> <path>/</path> <uriEncoding>utf-8</uriEncoding> </configuration> </plugin> </plugins> </build>
启动tomcat
在右侧 maven project 中找到对象项目,插件中找到tomcat7 , tomcat:run 邮件运行
6.6 依赖生命周期
6.6.1 概念
Jar包生效的时间段,即Jar的生命周期
6.6.2 使用方式
项目中导入的依赖可以做生命周期的管理
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> <!-- 生命周期 --> <scope>compile</scope> </dependency> <dependency> <!-- servlet编译环境 --> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 生命周期 --> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <!-- 生命周期 --> <scope>test</scope> </dependency>
6.6.3 生命周期详解
标识 | 周期 |
---|---|
compile | 缺省值,适用于所有阶段(测试运行,编译,运行,打包) |
provided | 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api.jar;适用于(测试运行,编译)阶段 |
runtime | 只在运行时使用,如 mysql的驱动jar,适用于(运行,测试运行)阶段 |
test | 只在测试时使用,适用于(编译,测试运行)阶段,如 junit.jar |
system | Maven不会在仓库中查找对应依赖,在本地磁盘目录中查找;适用于(编译,测试运行,运行)阶段 |
七、Maven指令
7.1 命令行
通过Idea打开
mvn clean 清理编译后的文件(删除target)
mvn compile 编译项目(编译后的文件输出到 target目录)
mvn test 执行所有的测试类中的测试方法
mvn package 打包, java项目打包成jar包,web项目打包成war包
mvn install 把jar| war 安装到本地仓库
注意:执行install命令时,会自动执行 compile, test, package 命令
执行package 命令是,会自动执行 compile, test命令, 依次类推
打开 cmd,并定位到项目目录 |
---|
执行maven指令 |
---|
7.2 Maven面板
Idea中有Maven面板,其中可以快速执行Maven指令
maven面板 |
---|
八、私服
8.1 概念
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。
有了私服之后,当 Maven 需要下载依赖时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
私服可以解决在企业做开发时每次需要的jar包都要在中心仓库下载,且每次下载完只能被自己使用,不能被其他开发人员使用
所谓私服就是一个服务器,但是不是本地层面的,是公司层面的,公司中所有的开发人员都在使用同一个私服
8.2 架构
无私服 | 有私服 |
---|---|
我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:
8.3 Nexus安装【了解】
1、私服的下载
2、私服的安装
2.1、解压到没有中文的路径下
2.2 安装
使用管理员身份运行 cmd 窗口
nexus install 安装命令
nexus start 启动服务命令
2.3 卸载命令
nexus stop 停止服务
nexus uninstall 卸载nexus 服务
2.4 访问私服
2.5 私服仓库的分类
宿主仓库(hosted)(都是自己上传的jar包): (3rd party )第三方的jar包(中央仓库没有的jar包( ojdbc.jar )),发行版依赖(release),测试版依赖(snapshorts)
代理仓库(proxy):中央仓库的jar包(central ), 中央仓库的测试版jar包(一般是空的)(apache snapshorts)
组仓库(group): 宿主仓库和代理仓库(一般在下载依赖的时候选择组仓库)
虚拟仓库(virtual) : maven 1 的jar包
3 上传jar包私服
配置私服的账号和密码: 配置在maven的 conf/settings.xml
<!-- nexus 的账号和密码 --> <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> <server> <id>thirdparty</id> <username>admin</username> <password>admin123</password> </server>指定上传的位置(配置在要上传的项目的pom文件中)
<!-- 上传的位置 --> <distributionManagement> <repository> <id>releases</id> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>4 从私服下载jar包本地仓库(maven/conf/settings.xml)
1. 创建下载的位置模板 <!--下载的位置--> <profile> <!--profile的id--> <id>dev</id> <repositories> <repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复--> <id>nexus</id> <!--仓库地址,即nexus仓库组的地址--> <url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下载releases构件--> <releases> <enabled>true</enabled> </releases> <!--是否下载snapshots构件--> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 --> <pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 --> <id>public</id> <name>Public Repositories</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </pluginRepository> </pluginRepositories> </profile> 2. 指定模板 <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>5 上传第三方jar包私服
mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=29.0 -Dpackaging=jar -Dfile=C:\Users\sun\Desktop\ojdbc.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码