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

相关推荐
悦悦子a啊2 小时前
Maven 项目实战入门之--学生管理系统
java·数据库·oracle
晨光32112 小时前
Day34 模块与包的导入
java·前端·python
知行合一。。。2 小时前
Python--01--核心基础
android·java·python
计算机毕设指导62 小时前
基于微信小程序的水上警务通系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
陌生的人儿2 小时前
老年痴呆患者心血管防护,硝酸甘油使用需 “专人监护”
java·eclipse·tomcat·maven·0.3mg硝酸甘油舌下片
冷雨夜中漫步2 小时前
Java类加载机制——双亲委派与自定义类加载器
java·开发语言·python
SadSunset2 小时前
(29)阶段性个人总结
java
qq_12498707533 小时前
基于springboot的智能医院挂号系统(源码+论文+部署+安装)
java·人工智能·spring boot·后端·毕业设计
悲喜自渡7213 小时前
Docker指令自存
java·docker·eureka