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

相关推荐
故事和你9143 分钟前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Configure-Handler1 小时前
buildroot System configuration
java·服务器·数据库
:Concerto2 小时前
JavaSE 注解
java·开发语言·sprint
电商API_180079052473 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
一点程序3 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
C雨后彩虹3 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
2601_949809593 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
vx_BS813303 小时前
【直接可用源码免费送】计算机毕业设计精选项目03574基于Python的网上商城管理系统设计与实现:Java/PHP/Python/C#小程序、单片机、成品+文档源码支持定制
java·python·课程设计
2601_949868363 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
达文汐4 小时前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣