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

相关推荐
roman_日积跬步-终至千里5 分钟前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦27 分钟前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli727 分钟前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
HalvmånEver29 分钟前
Linux:线程互斥
java·linux·运维
rainbow688936 分钟前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
灵感菇_41 分钟前
Java 锁机制全面解析
java·开发语言
indexsunny41 分钟前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
娇娇乔木1 小时前
模块十一--接口/抽象方法/多态--尚硅谷Javase笔记总结
java·开发语言
saber_andlibert1 小时前
TCMalloc底层实现
java·前端·网络
wangjialelele1 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先