一、Maven简介

1.1 Maven是什么?

MavenApache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。主要思想是通过将项目开发和管理过程抽象成一个项目对象模型(POM)的方式实现对Java项目的管理过程。
POM(Project Object Model,项目对象模型):Maven的核心。也是Maven对一个单一项目的描述。

1.2 Maven功能作用

1、依赖管理:管理项目依赖资源(jar包)、避免资源版本冲突(版本冲突控制);
2、项目构建:提供标准、跨平台、自动化的项目构建方式;完成项目代码的编译、测试、打包和部署;
3、统一开发结构:提供标准的、统一的项目结构;

1.3 Maven应用方式

1、独立应用Maven:通过Maven的各种命令进行项目的管理与控制(比如:编译、测试、打包等);
2、IDE+Maven结合:一般在IntelliJ IDEAEclipse等IDE开发工具中集成使用maven,简单,快捷,不需要级命令;

1.4 Maven组成结构

Maven组成结构

1.5 Maven项目体系结构

Maven项目体系结构

1.6 Maven相关概念

1.6.1 基本概念

(1) POM(项目对象模型):指pom.xml模型文件。旨在将项目抽象为一个模型使用,以完成编译、测试、打包、安装、部署等等。
(2) 统一的目录结构:有规定的目录和文件位置
(3) 资源坐标:jar资源的唯一标识(组织名groupId+项目名artifactId+版本号version)
(4) 依赖管理:管理本地项目所依赖的jar资源文件
(5) 仓库管理:jar资源的统一管理(分类:本地仓库、私服仓库、镜像仓库、中央仓库)
(6) 构建生命周期:maven工具构架项目的过程
(7) 插件和目标:执行maven构建时用的工具是插件
(8) 继承(高级)
(9) 聚合(高级)

1.6.2 Maven的生命周期(构建)

  • Maven的生命周期(构建)过程包括:清理、编译、测试、报告、打包、安装、部署
  • 清理(clean): 对应命令——mvn clean。删除上一次构建的结果,为下一次构建做好准备。
  • 编译(compile): 对应命令——mvn compilemvn test-compile。将Java源程序或Java测试程序编译成(*.class)字节码文件。
  • 测试(test): 对应命令——mvn test。运行提前准备好的测试程序,执行src/text/java下的junit测试用例。
  • 报告(site): 对应命令——mvn site。每次测试后用标准格式记录和显示测试结果。
  • 打包(package): 对应命令——mvn package。Java工程打成jar包;Web工程打成war包。
  • 安装(install): 对应命令——mvn install。把一个Maven工程经过打包操作生成的jar包/war包存入Maven仓库。
  • 部署(deploy): 对应命令——mvn deploy。部署jar包——把一个jar包部署到Nexus私服服务器上,让其它开发人员共享;部署war包——借助相关Maven插件(例如cargo),将war包部署到Tomcat服务器上。

1.6.3 统一的目录结构(图示)

统一目录


二、Maven下载、安装与集成

2.1 下载Maven安装包

2.1.1 下载链接

①Apache官网: https://www.apache.org/
②Maven首页: https://maven.apache.org/
③最新版本下载链接: https://maven.apache.org/download.cgi
④历史版本环境说明: https://maven.apache.org/docs/history.html
👉Maven3镜像仓库下载链接(历史版本): https://archive.apache.org/dist/maven/maven-3/
👉Maven4镜像仓库下载链接(历史版本): https://archive.apache.org/dist/maven/maven-4/

2.1.2 下载说明

  • 官网最新版本说明:
    官网最新版说明
  • 镜像历史版本说明:
    镜像历史版本说明

2.2 环境配置与安装步骤(Windows环境)

  • apache-maven-3.6.2-bin 版本安装为例:

2.2.1 安装过程说明(解压即安装)

1.获取已下载好的二进制安装资源包: apache-maven-3.6.2-bin.zip
apache-maven-3.6.2-bin.zip
2.拷贝到【自定义】的maven安装路径下:
自定义安装目录
3.右键【解压到当前目录】
解压
4.安装目录说明:
目录说明

2.2.2 修改本地仓库设置

  • maven默认本地仓库配置位于 ${user.home}/.m2/repository 下, ${user.home} 默认存在C盘(系统盘)中,长期置于此会导致系统盘的压力逐渐增大,影响系统运行效率和性能。故一般情况需要变更配置,修改本地仓库地址。
  • 处置方法:自定义 ——置于D盘等非系统盘即可。可参考下图进行自定义配置,方便管理。
    maven本地仓库

2.2.3 环境变量配置

①到②
②到⑤
⑥到⑩

2.2.5 安装成功验证(cmd命令行窗口输入指令:mvn -v或mvn -version)

安装验证

2.2.6 注意事项

  • 安装目录中尽可能不含有[空格][中文汉字]等特殊字符;
  • Maven的安装依赖于Java,在安装Maven之前需要安装配置好Java环境;

2.3 环境配置与安装步骤(Linux环境)

👉载自CSDN@爱编程的小庄Maven的介绍及安装

2.3.1 过程说明(解压即安装)

1.下载 Maven
在 Maven 的官方网站上下载最新的Maven安装包,通常为一个压缩包,例如 apache-maven-3.8.3-bin.tar.gz。
2.解压 Maven
将下载的压缩包解压到合适的目录下,例如 /opt/maven。可以使用以下命令进行解压:tar -zxvf apache-maven-3.8.3-bin.tar.gz -C /opt/
3.配置环境变量
在命令行中执行以下命令打开配置文件:vi /etc/profile

  • export M2_HOME=/opt/maven/apache-maven-3.8.3
  • export PATH=PATH:M2_HOME/bin

4.生效环境变量
执行以下命令,使环境变量生效:source /etc/profile
5.验证 Maven 安装
在终端中输入以下命令,查看 Maven 是否成功安装:mvn -version

2.3 与IDE开发工具集成

2.3.1 IntelliJ IDEA与Maven集成

  • 第一步: 【File】→【Settings…】;
  • 第二步: 搜索【maven】→点击【maven】选项;
  • 第三步: 修改【maven home directory】 到自己的本地maven路径下 (虽然IntelliJ IDEA已默认集成maven,但一般不用)
  • 第四步: 修改【user settings file】到自定义的配置文件。
  • 第五步(可选/可在第四步配置): 修改【local repository】到自定义的配置文件。
    在这里插入图片描述

2.3.2 Eclipse/MyEclipse与Maven集成(略)

  • 点击菜单栏window>preferences>Maven>User Settings
    在这里插入图片描述

三、Maven手动构建

3.1 手动创建Maven工程结构

  • 手动创建如下结构的文件夹体系
    构建目录结构
  • 为MyApp.java、MyAppTest.java、pom.xml文件填充内容

—MyApp.java—

package com.company;

public class MyApp {
    public String say(String name) {
        System.out.println("hello " + name);
        return "hello " + name;
    }
}

—MyAppTest.java—

package com.company;

import org.junit.Test;
import org.junit.Assert;

public class MyAppTest{
    @Test
    public void testSay(){
        MyApp myApp = new MyApp();
        String ret =myApp.say("maven");
        Assert.assertEquals("hello maven",ret);
    }
}

—pom.xml—

<?xml version="1.0" encoding="UTF-8"?>

<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>4.0.0</modelVersion>
    
    <groupId>org.example</groupId>
    <artifactId>webapp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

</project>

3.2 手动Maven工程生命周期构建(命令行)

3.2.1 编译指令&清除指令:mvn compile & mvn clean

  • 编译过程如下图(非首次编译;首次编译需要下载插件,比较慢)
    在这里插入图片描述

  • 编译指令执行结果:产生[target]文件夹
    编译结果
    在这里插入图片描述

  • 清除指令执行结果:[target]文件夹被清除
    清除结果

3.2.2 测试指令:mvn test-compile & mvn test

  • 测试过程如下图(非首次;首次测试需要下载插件,比较慢)
    测试
  • 测试指令执行结果:[target]文件夹下增加[surefire-reports(测试报告)]和[test-classes(测试程序字节文件)]两个文件夹
    在这里插入图片描述

3.2.3 打包指令:mvn package

  • 打包执行过程如下图(非首次;首次执行需要下载插件,比较慢)
    打包
  • 打包指令执行结果:[target]文件夹下增加[maven-archiver]文件夹和[webapp-1.0-SNAPSHOT.jar]文件
    在这里插入图片描述

3.2.4 安装指令:mvn install

  • 安装执行过程如下图(非首次;首次执行需要下载插件,比较慢)
    安装
  • 安装指令执行结果: 本地仓库中导入了自己的jar资源在这里插入图片描述

3.2.5 其他指令:略


四、Maven模型构建

4.1 其他指令:略


五、基础附加补充

6.1 配置文件 settings.xml 说明

<?xml version="1.0" encoding="UTF-8"?>
<settings 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/settings-1.0.0.xsd">

    <!-- 1.本地仓库配置。默认路径${user.home}/.m2/repository -->
    <localRepository>${user.home}/.m2/repository</localRepository>

    <!-- 2.maven交互模式:Maven是否需要和用户交互以获得输入。默认为true -->
    <interactiveMode>true</interactiveMode>

    <!-- 3.maven离线模式设置:默认为false -->
    <offline>false</offline>

    <!-- 4.额外的组标识符列表:当按前缀解析插件时,即当调用类似“mvn-prefix:goal”的命令行时,将搜索这些组标识符。如果列表中尚未包含组标识符“org.apache.Maven.plugins”和“org.codehaus.mojo”,Maven将自动添加这些标识符。-->
    <pluginGroups>
        <pluginGroup>com.your.plugins</pluginGroup><!--plugin的组织Id(groupId) -->
    </pluginGroups>

    <!-- 5.代理配置与管理:网络代理的列表,除另有规定(由系统属性或命令行开关),否则将使用列表中标记为活动的第一个代理规范。多代理可应对笔记本或移动设备的工作环境;通过简单设置profileId可较容易的更换整个代理配置 -->
    <proxies>
        <proxy><!-- 代理元素项 -->
            <id>myproxy</id><!-- 代理标识Id -->
            <active>true</active><!-- 激活设置:true表示激活代理 -->
            <protocol>http</protocol><!-- 代理协议 -->
            <host>proxy.somewhere.com</host><!-- 代理主机名 -->
            <port>8080</port><!-- 代理端口号 -->
            <username>proxyuser</username><!-- 代理用户名,登录代理服务器认证用 -->
            <password>proxypass</password><!-- 代理用户密码,登录代理服务器认证用 -->
            <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts><!-- 不该被代理的主机名列表 -->
        </proxy>
    </proxies>

    <!-- 6.服务端配置与管理:一些设置如安全证书不应该和pom.xml一起分发。该类型信息应该存在于构建服务器上的settings.xml文件中。-->
    <servers>
        <server><!-- 服务器元素项 -->
            <id>server001</id><!-- 服务端server标识id(不是用户登陆Id),与distributionManagement中repository元素的Id相配 -->
            <username>my_login</username><!-- 服务端鉴权用户名,登录服务器认证用 -->
            <password>my_password</password><!-- 服务端鉴权用户密码,登录服务器认证用 -->
            <privateKey>${usr.home}/.ssh/id_dsa
            </privateKey><!-- 服务端鉴权时的私钥位置,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)  -->
            <passphrase>some_passphrase</passphrase><!-- 服务端鉴权时使用的私钥密码 -->
            <filePermissions>664</filePermissions><!-- 文件被创建时的权限:如果部署时会创建仓库文件或目录,这时便可使用权限(permission) -->
            <directoryPermissions>775</directoryPermissions><!-- 目录被创建时的权限 -->
        </server>
    </servers>

    <!-- 8.镜像仓库配置与管理:为仓库列表配置的下载镜像列表,高级设置请参阅镜像设置页面 -->
    <mirrors>
        <mirror><!-- 镜像仓库元素配置项 -->
            <id>planetmirror.com</id><!-- 镜像仓库的唯一标识 -->
            <name>PlanetMirror Australia</name><!-- 镜像仓库名称 -->
            <url>http://downloads.planetmirror.com/pub/maven2</url><!-- 镜像仓库URL地址 -->
            <mirrorOf>central</mirrorOf><!-- 被镜像的服务器Id标识 -->
        </mirror>
    </mirrors>

    <!-- 9.多方式配置文件激活设置,可以修改构建过程。根据环境参数来调整构建配置的列表。settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。
    它包含了id,activation, repositories, pluginRepositories和 properties元素。
    这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。
    如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile -->
    <profiles>
        <profile><!-- 激活配置元素项 -->
            <id>jdk-1.4</id><!-- 激活配置项标识Id -->
            <!-- 9.1 自动触发profile的条件逻辑:Activation是profile的开启钥匙。 
            如POM中的profile一样,profile的力量来自于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。
            settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test) -->
            <activation>
                <activeByDefault>false</activeByDefault><!-- profile激活标识,默认false -->
                <!-- 激活方式①:JDK方式。当匹配的jdk被检测到,profile被激活 -->
                <jdk>1.4</jdk>
                <!-- 激活方式②:操作系统方式。当匹配的操作系统属性被检测到,profile被激活 -->
                <os>
                    <name>Windows XP</name><!-- 激活profile的操作系统名 -->
                    <family>Windows</family><!-- 激活profile的操作系统所属族(如 'windows') -->
                    <arch>x86</arch><!-- 激活profile的操作系统体系结构 -->
                    <version>5.1.2600</version><!-- 激活profile的操作系统版本 -->
                </os>
                <!-- 激活方式③:文件方式。通过提供一个文件名检测该文件是否存在来激活profile。细分missing和exists两种激活方式,互斥使用 -->
                <file>
                    <missing>${basedir}/file1.properties</missing><!-- missing方式:如果指定的文件不存在,则激活profile。-->
                    <exists>${basedir}/file2.properties</exists><!-- exists方式:如果指定的文件存在,则激活profile。 -->
                </file>
                <!-- 激活方式④ -->
                <property>
                    <name>target-env</name>
                    <value>dev</value>
                </property>
            </activation>
            <!-- 9.2 远程仓库配置与管理 -->
            <repositories>
                <repository><!-- 远程仓库元 -->
                    <id>jdk14</id><!-- 远程仓库标识Id -->
                    <name>Repository for JDK 1.4 builds</name><!-- 远程仓库名称 -->
                    <url>http://www.myhost.com/maven/jdk14</url><!-- 远程仓库URL地址 -->
                    <layout>default</layout><!-- 用于定位和排序构件的仓库布局类型(取值default/legacy) -->
                    <!--<snapshotPolicy>always</snapshotPolicy>-->
                    <releases><!-- 如何处理远程仓库里发布版本的下载。类型构建下载有releases和snapshots两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的策略 -->
                        <enabled>false</enabled><!-- 该仓库是否开启发布版构件下载,取值true/false -->
                        <updatePolicy>always
                        </updatePolicy><!-- 该元素指定更新发生的频率,取值always/daily(默认)/interval:X(X单位分钟)/never -->
                        <checksumPolicy>warn
                        </checksumPolicy><!-- 当Maven验证构件校验文件失败时处理操作,取值ignore(忽略)/fail(失败)/warn(警告) -->
                    </releases>
                    <snapshots><!-- 如何处理远程仓库里快照版本的下载(同上) -->
                        <enabled/><!-- 该仓库是否开启快照版构件下载,取值true/false -->
                        <updatePolicy/>
                        <checksumPolicy/>
                    </snapshots>
                </repository>
            </repositories>
            <!-- 9.3 发现插件的远程仓库列表。仓库是两种主要构件的家。第一种构件被用作其它构件的依赖。这是中央仓库中存储的大部分构件类型。另外一种构件类型是插件。Maven插件是一种特殊类型的构件。
            由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。-->
            <pluginRepositories><!-- (同9.3) -->
                <pluginRepository>
                    <id/>
                    <name/>
                    <url/>
                    <layout/>
                    <releases>
                        <enabled/>
                        <updatePolicy/>
                        <checksumPolicy/>
                    </releases>
                    <snapshots>
                        <enabled/>
                        <updatePolicy/>
                        <checksumPolicy/>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
            <!-- 9.4 对应profile的扩展属性列表:Maven属性和Ant中的属性一样,可以用来存放一些值。这些值可以在POM中的任何地方使用标记${X}来使用,这里X是指属性的名称。
            属性有五种不同的形式,并且都能在settings.xml文件中访问。如果该profile被激活,则可以再POM中使用${user.install}
               1. env.X: 在一个变量前加上"env."的前缀,会返回一个shell环境变量。例如,"env.PATH"指代了$path环境变量(在Windows上是%PATH%)。
               2. project.x:指代了POM中对应的元素值。例如: <project><version>1.0</version></project>通过${project.version}获得version的值。
               3. settings.x: 指代了settings.xml中对应元素的值。例如:<settings><offline>false</offline></settings>通过 ${settings.offline}获得offline的值。
               4. Java System Properties: 所有可通过java.lang.System.getProperties()访问的属性都能在POM中使用该形式访问,例如 ${java.home}。
               5. x: 在<properties/>元素中,或者外部文件中设置,以${someVar}的形式使用。 -->
            <properties>
                <tomcatPath>/path/to/tomcat/instance</tomcatPath>
                <user.install>${user.home}/our-project</user.install>
            </properties>
        </profile>
    </profiles>
    <!-- 10.手动激活profiles的列表:按照profile被应用的顺序定义activeProfile。 该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。
    任何在activeProfile中定义的profile id,不论环境设置如何,其对应的profile都会被激活。如果没有匹配的profile,则什么都不会发生。例如,env-test是一个activeProfile,
    则在pom.xml(或者profile.xml)中对应id的profile会被激活。如果运行过程中找不到这样一个profile,Maven则会像往常一样运行。 -->
    <activeProfiles>
        <activeProfile>alwaysActiveProfile</activeProfile>
        <activeProfile>anotherAlwaysActiveProfile</activeProfile>
    </activeProfiles>
</settings>

6.2 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/maven-v4_0_0.xsd">
    <!-- 1.POM更新版本号 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 2.组织名 -->
    <groupId>abc</groupId>
    <!-- 3.项目工程名 -->
    <artifactId>abc</artifactId>
    <!-- 4.项目版本号 -->
    <version>0.0.1-SNAPSHOT</version>
    <!-- 5.项目打包方式  -->
    <packaging>war</packaging>
    <!-- 6.maven项目模板名  -->
    <name>maven</name>
    <!-- 7.maven项目模板描述-->
    <description>description</description>
    <!-- 8.依赖版本控制 -->
    <properties>
        <springframework.version>2.5.6</springframework.verson>
        <!-- 只需在子模块添加<version>${springframework.version}</version>进行控制 -->
    </properties>
    <!-- 9.依赖资源集 -->
    <dependencies>
        <dependency><!-- 依赖项 -->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <type>jar</type><!-- 依赖的类型,默认为jar,一般不声明 -->
            <scope>test</scope>  <!-- 依赖范围/作用域,取值compile/provided/runtime/system/test -->
            <optional>true</optional> <!-- 标记依赖可选性(标记依赖项是否对外隐藏),取值true/false -->
            <exclusions><!-- 排除依赖传递性(踢出传递依赖项) -->
                <exclusion>
                    <groupId>abcd</groupId>
                    <artifactId>abcd</artifactId>
                </exclusion>
            </exclusions>
            <classifier>classifier</classifier><!-- 拓展 -->
            <systemPath>01_ITsoftPAN</systemPath><!-- 拓展 -->
        </dependency>
    </dependencies>
    <!-- 10.项目构建 -->
    <build>
        <plugins><!-- 插件组 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!-- 11.配置远程仓库 -->
    <repositories>
        <repository><!-- 设置远程版本库  直接收发布版本 不接受快照版本-->
            <id>jboss</id>  <!-- 如果是用central 就会覆盖中央仓库 -->
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2/</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
            <snapshots><!-- 同上releases -->
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <!-- 12.将该项目发布到远程仓库中 -->
    <distributionManagement>
        <repository>
            <id>proj-release</id><!-- 这里的id是为了跟setting.xml中的username和userpassword的id匹配,有的仓库需要权限账户 -->
            <name>Proj Release Repository</name>
            <url>http://192.168.89.130</url>
        </repository>
        <snapshotRepository>
            <id>proj-release</id>
            <name>Proj Release Repository</name>
            <url>http://192.168.89.130</url>
        </snapshotRepository>
    </distributionManagement>
</project>

6.3 maven常用命令说明

# ---------------实际应用-----------------------
# 1、刷新子模块版本号: 
mvn versions:update-child-modules
# 2、重新打包到maven本地库: 
mvn clean install -Dmaven.test.skip=true
mvn install
# 3、部署包到远程服务器
mvn clean deploy -Dmaven.test.skip=true

#---------------------一般常用命令--------------------------------
# 该命令打印出所有的java系统属性和环境变量
mvn help:system           自动在本用户下创建本地仓库(~/.m2/repository)
# 清理输出目录默认target/
mvn clean
mvn clean compile         清理编译
# maven test,但实际执行的命令有:clean:clean,resource:resources,compiler:compile, resources:testResources, compiler:testCompile,maven在执行test之前,会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,测试代码编译通过之后默认在target/test-calsses目录下生成二进制文件,紧接着surefile:test 任务运行测试,并输出测试报告,显示一共运行了多少次测试,失败成功等等
mvn clean test            清理测试
mvn clean package         清理打包
mvn clean install         清理将打包好的jar存入 本地仓库
mvn clean deploy          根据pom中的配置信息将项目发布到远程仓库中 
echo %MAVEN_HOME%         查看maven安装路径

# ---------------------创建项目-----------------------------------
mvn -version/-v           显示版本信息
mvn archetype:generate    创建mvn项目,使用Archetype生成项目骨架
# 创建mvn项目
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app
# 创建Maven的普通java项目:
mvn archetype:create -DgroupId=packageName -DartifactId=projectName 
# 创建Maven的Web项目:  
mvn archetype:create -DgroupId=packageName   -DartifactId=webappName-DarchetypeArtifactId=maven-archetype-webapp   

# ---------------------优化依赖命令-------------------------------
mvn dependency:list       显示所有已经解析的所有依赖
mvn dependency:tree       以目录树的形式展现依赖,  最高层为一层依赖 其次二层依赖 三层依赖....
mvn dependency:analyze    第一部分显示 已经使用但是未显示依赖的的  第二部分显示项目未使用的但是依赖的

# ---------------------第三方jar发布到远程仓库---------------------
mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/

# ---------------------第三方jar安装到本地仓库---------------------
mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DdownloadSources=true -DdownloadJavadocs=true

#你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的.参数: 1. -Dplugin=pluginName   2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”)
mvn help:describe -Dplugin=help -Dmojo=describe

# ---------------------其他命令-----------------------------------
mvn -e                    显示详细错误 信息.
mvn validate              验证工程是否正确,所有需要的资源是否可用。
mvn test-compile          编译项目测试代码。 。
mvn integration-test      在集成测试可以运行的环境中处理和发布包。
mvn verify                运行任何检查,验证包是否有效且达到质量标准。 
mvn generate-sources      产生应用需要的任何额外的源代码,如xdoclet。

👉该部分参考CSDN@红月修罗Maven 详解及常用命令


参考外链接1:@汪了个王
参考外链接2:@不服輸的麻雀
参考外链接2:@神兽汤姆猫
参考视频链接:@黑马程序员#Bilibili

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐