Maven管理工具

一、相关概念

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.私服:一种特殊的远程仓库,它是架设在局域网内的仓库

相关推荐
X***07881 天前
从语言演进到工程实践全面解析C++在现代软件开发中的设计思想性能优势与长期生命力
java·开发语言
smileNicky1 天前
SpringBoot系列之集成Pulsar教程
java·spring boot·后端
Sammyyyyy1 天前
Rust 1.92.0 发布:Never Type 进一步稳定
java·算法·rust
alonewolf_991 天前
深入解析G1与ZGC垃圾收集器:原理、调优与选型指南
java·jvm·算法
小镇学者1 天前
【c++】C++字符串删除末尾字符的三种实现方法
java·开发语言·c++
rfidunion1 天前
springboot+VUE+部署(1。新建项目)
java·vue.js·spring boot
小翰子_1 天前
Spring Boot整合Sharding-JDBC实现日志表按月按周分表实战
java·spring boot·后端
weixin_399380691 天前
OA 系统假死问题分析与优化
java·运维
豆沙沙包?1 天前
2026年--Lc334-2130. 链表最大孪生和(链表转数组)--java版
java·数据结构·链表
柒.梧.1 天前
SSM常见核心面试问题深度解析
java·spring·面试·职场和发展·mybatis