一、相关概念
1 、什么是Maven
跨平台 的项目管理工具。主要服务于基于java平台的项目构建,依赖管理和项目信息管理。
Q:什么是理想的项目构建?
A:高度自动化,跨平台,可重用的组件,标准化的流程。
2 、什么是依赖管理
对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。
对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。
3 、什么是项目构建
项目构建是一个从编写源代码到编译、测试、运行、打包、部署的过程。
传统项目:打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。
maven项目:
maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。
清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署
4 、Maven的优点
拥有约定,知道你的代码在哪里,放到哪里去。
拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程。
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情。
拥有依赖管理,仓库管理。
二、初始Maven
1.maven安装目录分析:
(1)bin:含有mvn运行的脚本
mvn脚本关键部分解析:
bash
#!/bin/sh
# 检查JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
echo "Error: JAVA_HOME not found in your environment."
exit 1
fi
# 设置类路径
CLASSWORLDS_JAR=`ls "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
MAVEN_OPTS="$MAVEN_OPTS -Xms256m -Xmx512m"
# 执行Java程序
exec "$JAVA_HOME/bin/java" \
$MAVEN_OPTS \
-classpath "$CLASSWORLDS_JAR" \
"-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
"-Dmaven.home=${MAVEN_HOME}" \
org.codehaus.plexus.classworlds.launcher.Launcher "$@"
(2)boot:含有plexus-classworlds类加载容器
Plexus Classworlds核心作用:
1.隔离类加载:避免类冲突
2.动态类加载:支持插件机制
3.多项目支持:同时加载不同版本的库
(3)conf(全局配置中心):含有settings.xml配置文件
XML
<!-- conf/settings.xml 结构 -->
<settings>
<!-- 本地仓库位置 -->
<localRepository>${user.home}/.m2/repository</localRepository>
<!-- 交互模式 -->
<interactiveMode>true</interactiveMode>
<!-- 是否离线 -->
<offline>false</offline>
<!-- 插件组 -->
<pluginGroups>
<pluginGroup>org.apache.maven.plugins</pluginGroup>
</pluginGroups>
<!-- 代理服务器 -->
<proxies>
<proxy>
<id>corporate-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.example.com</host>
<port>8080</port>
<username>user</username>
<password>password</password>
<nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
</proxy>
</proxies>
<!-- 服务器认证信息 -->
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<!-- 镜像配置 -->
<mirrors>
<mirror>
<id>aliyun-maven</id>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<!-- 配置文件 -->
<profiles>
<profile>
<id>jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</profile>
</profiles>
<!-- 激活的配置文件 -->
<activeProfiles>
<activeProfile>jdk-11</activeProfile>
</activeProfiles>
</settings>
(4)lib:含有Maven运行时所需要的java类库
lib/
├── maven-core-*.jar # Maven核心引擎
├── maven-model-*.jar # POM模型
├── maven-settings-*.jar # 配置处理
├── maven-repository-metadata-*.jar # 仓库元数据
├── maven-artifact-*.jar # 工件处理
├── maven-plugin-api-*.jar # 插件API
├── maven-compat-*.jar # 向后兼容
├── plexus-*.jar # 容器框架
├── slf4j-api-*.jar # 日志门面
├── commons-*.jar # 工具类库
└── guice-*.jar # 依赖注入
(5)LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
2.Maven仓库
(1)仓库是用来统一存储所有Maven共享构建的位置,可根据Maven坐标定义每个构建在仓库中唯一存储路径。
groupId/artifactId/version/artifactId-version.packaging
(2)仓库的分类:
本地仓库:每个用户只有一个本地仓库
远程仓库:
a.中央仓库:Maven默认的远程仓库 http://repol.maven.org/maven2
b.私服:一种特殊的远程仓库,它是架设在局域网内的仓库