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

相关推荐
蜗牛互联网1 小时前
Python Agent 工具调用:审批令牌、参数白名单和累计预算
java·开发语言·人工智能·windows·后端·python
哦虎!1 小时前
【JavaEE】网络编程套接字
java
Wang's Blog1 小时前
Java 项目实战: 交友项目 - SpringCloud 整合 Dubbo 的方案概述
java·spring cloud·交友
imDwAaY1 小时前
程序里的地址是真实内存地址吗?从虚拟内存到地址转换
java·linux·服务器
秋饼2 小时前
Claude Haiku 5.5 + Spring AI 2.0 企业级低成本高并发 AI Agent 实战:子智能体分工、成本熔断与百万上下文落地
java·ai·技术分享·后端开发
xuxigifxfh2 小时前
牛客:BISHI8 大整数哈希
java·算法·哈希算法
涉密IT资质笔记2 小时前
涉密资质投入产出分析模型:时间成本、四块成本构成与 ROI 决策框架
java·开发语言·算法
木井巳2 小时前
【BFS 解决拓扑排序】火星词典
java·算法·leetcode·广度优先·宽度优先·图搜索算法
霸道流氓气质2 小时前
Java调用StableDiffusion/ComfyUI图像生成:DAG工作流编排、WebSocket实时进度与Flux模型集成的生产级实战
java·websocket·stable diffusion
北风toto2 小时前
KMP 算法详解:从暴力匹配到 O(n+m) 的字符串搜索
java·开发语言·算法