zoukankan      html  css  js  c++  java
  • Maven简介

    一. 何为Maven

    项目构建工具,抽象了构建生命周期,不必再去定义构建过程,像一个简单的maven install命令后对应着编译、测试、打包等动作

    依赖管理工具,通过一个坐标系统(groupId, artifactId, version)准确定位到每一个构件(artifact),即可以根据一个坐标定位到任何一个jar文件

    maven为全世界提供了免费的中央库,可以在这这个中央库找到绝大部分流行的开源类库。

    对比:Ant

    Ant(Another Neat Tool),含义是“另一个整洁的工具”

    Ant使用XML定义构建脚本,有一个build.xml文件,在build.xml里定义构建过程(指定编译、打包等)

    Ant需要开发者显式地指定每一个目标,以及完成该目标所需要执行的任务,针对每个项目都要写一遍

    Ant没有依赖管理, 需要手工管理依赖,这点非常致命,特别是在多人参与的项目里很艰难

    二. maven安装(Windows环境)

    1. 下载地址:http://maven.apache.org/download.cgi

    可以下载apache-maven-3.5.3-bin.zip,然后解压,我解压后的位置是:G:study oolsapache-maven-3.5.3

    2. 环境变量配置

    新建个变量名为M2_HOME,值为G:study oolsapache-maven-3.5.3

    再在path里添加:%M2_HOME%in;

    确定后,到命令窗口确认是否安装成功:mvn -v

     三. maven安装目录解析

    1. bin

    包含了mvn运行的脚本

    2. conf

    包含一个非常重要的文件:settings.xml

    settings.xml是当前maven环境的全局配置文件

    一般情况下,我们会把settings.xml复制到~/m2/目录下(~/表示用户目录),然后修改这个目录下的settings.xml,在用户范围控制maven配置

     如我的目录就是:C:Usersconglin.m2

    3. ~/.m2/目录,这个目录不是安装目录,在我们安装maven后,任何一个涉及到下载jar(或其他依赖构件)的mvn命令都会默认在用户目录下生成/.m2

    其中/.m2 epository/就是存放着我们构件项目时从远程库下载到本地的依赖构件

     四. maven项目核心文件——pom.xml

     pom(Project Object Model,项目对象模型),定义了项目的基础信息,用于描述项目如何构建以及声明项目依赖等。

    如下是我在创建一个Spring boot项目demo时的pom.xml,其中<!-- -->是我添加用于描述标签含义的备注

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- xml标签指定xml文档版本和编码 -->
    <!-- project是pom.xml的根元素 -->
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!-- modelVersion指定了当前POM模型的版本,对于maven2和maven3来说,值只能是4.0.0 -->
        <modelVersion>4.0.0</modelVersion>
    
        <!-- groupId,artifactId,version这三个元素定义了当前项目的基本坐标 
            其中,
            groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联
            artifactId定义了当前项目组在组中唯一的id
            version表示当前项目的版本,SNAPSHOT表明当前项目还在开发过程中,是不稳定的快照版本
        
        -->
        <groupId>com.example</groupId>
        <artifactId>fuck</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- packaging指定打包类型,没指定时默认是jar -->
        <packaging>jar</packaging>
    
        <!-- 是项目更具可读性的名称,非必须 -->
        <name>fuck</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>

    其实在我们想通了maven的存在的意义后,对于pom.xml中陌生的标签,完全通过实时上网查询资料来了解,

    只要清楚各种标签最终都体现在几种用途:打包说明、依赖说明、项目说明等

    五. 仓库——repository

    Maven可以在某个位置统一存储所有maven项目共享的构件,而这个统一的位置就是仓库。

    对于maven来说,仓库只分为两类:本地仓库和远程仓库。当maven根据坐标寻找构件时,首先查询本地仓库,本地仓库没有时再查询远程仓库,当两者都没有时就会报错。

    1. 本地仓库

    在Windows环境下,本地仓库通常默认为~.m epository

    而当前用户的目录往往在C盘中,在C盘硬盘容量不够时,我们可以在setting.xml的localRepository标签里设置

    <localRepository>D:maven
    epo</localRepository>

    2. 远程仓库

    远程仓库往往被细分为三大类:中央仓库、私服、其他公开的远程仓库

    其中,私服几乎是所有公司都会有!

    私服详情可见稍后出的【Nexus maven私服记】

    六. mvn clean install

    我们在打包项目时,最常用的命令就是

    mvn clean install

    然而mvn clean install的背后还经历了啥?

    执行mvn clean install命令时,相当于后台还依次执行了如下命令的动作:

    mvn clean compile
    mvn clean test
    mvn clean package
    mvn clean install
    //注:以上命令依次从上往下,当执行下边的命令时,自动调用执行上边的命令动作;clean指定了清除项目的/target目录,clean并非必要的参数

    即执行mvn clean install命令时,先后进行了编译、测试、打包,最后还将打包出来的该项目安装到本地仓库,以供其他maven项目使用

    所以当我们被问maven的打包命令时,可以说是mvn install,但严格来说应该是mvn package

    说明:本博客内容绝大部分摘抄于【Maven实战 第一版 许晓斌 机械工业出版社】,本文仅供个人学习,禁止任何形式的转载!

  • 相关阅读:
    wordpress 自己制作子主题 child theme
    wordpress 主题开发
    python的曲线平滑工具,及python画一条线中包含不同粗细不同颜色的画线方法
    openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide
    How to store scaling parameters for later use
    在android上跑 keras 或 tensorflow 模型
    Win10更新搜狗输入法后重启输入密码蓝屏
    Audition CC2019 MME设备内部错误怎么解决!
    数据库优化解决方案
    微信小程序文本如何换行
  • 原文地址:https://www.cnblogs.com/LinBug/p/8993488.html
Copyright © 2011-2022 走看看