Maven入门

一 介绍

Maven核心上是一个执行插件的框架,所有的工作都由插件完成。插件提供了很多goal,为了同一个目的,并且这些goal可以通过maven执行,如mvn archetype:generate ...(一堆参数)archetype是插件提供给这个goal的前缀

Maven有三个内置的生命周期,即clean,用于清理项目;default,编译部署项目;site,生成网页文档。一个生命周期由一系列phase组成,当maven执行某个phase时,如mvn package, 会按顺序执行之前的phase和该phase。实际上phase会被映射到底层的goals,也就是说,真正执行的是goals,并且一个phase可以执行多个goals。根据项目的不同打包类型,每个phase使用的goals可能不同。为了执行内置的生命周期,一些插件会默认被maven使用。

default lifecycle常用的phases:
在这里插入图片描述

总的,插件可以被归为两类:

  • Build plugins:在项目构建时执行;在pom的<build/>元素中配置

  • Reporting plugins:在生成文档时被执行;在pomr的<reporting/>元素中配置

具体关于Lifecycle vs. Phase vs. Plugin vs. Goal的区别,请看参考链接

二 生命周期

三个生命周期所有的phase如下所示:

  • clean:pre-clean, clean, post-clean
  • default:validate, initialize, generate-sources, process-sources, generate-resources,
    process-resources, compile, process-classes, generate-test-sources,
    process-test-sources, generate-test-resources, process-test-resources,
    test-compile, process-test-classes, test, prepare-package, package,
    pre-integration-test, integration-test, post-integration-test, verify, install, deploy
  • site:pre-site, site, post-site, site-deploy

三 其他

3.1 项目三坐标

  • groupId:组ID,用于区分所有项目,如在Maven仓库中区分,应该遵循包命名。
  • artifactId:包ID,打包后jar名除去版本号的部分。
  • version:版本号。如2.0,2.0.1,1.3.1,而SNAPSHOT表示帧在开发?

最终的package名可以与groupId、artifactId无关,没有强制约束关系,但一般为两者的组合。

参考:Guide to naming conventions on groupId, artifactId, and version

3.2 依赖

依赖有作用域范围,因此依赖可以划分为很多种,大多可以通过scope元素指定,而optional、excluded依赖需要专门的元素指定,并可以scopde依赖合用。

  • optional依赖:声明后,即能被该maven项目使用,没有传递性。即A依赖B,B optional依赖C,则A不会引入C。

3.3 父、子POM

一个项目可以由多个相对独立的模块(小项目)组成,每个模块可以存在一个pom文件。为了防止模块之间冗余,父pom抽离子pom间的公共部分,由子pom继承父pom配置,使项目更容易维护。

当父、子pom中属性或依赖冲突时,子pom优先级高。

3.3.1 定义

  • 父pom:通过在pom中定义<packaging>pom</packaging>来声明;

  • 子pom:pom中添加parent元素,如:

        <parent>
            <groupId>top.sidian123.demo</groupId>
            <artifactId>MavenExamples</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    

    parent元素中可定义relativePath元素,表明父pom相对于当前子pom的位置。默认../pom.xml,如果不填,则从仓库中查找。

3.3.2 依赖查找

  1. 先在父pom中查找依赖
  2. 在本地仓库中查找
  3. 最后查找远程仓库

参考:Maven – Parent and Child POM Example

3.3.3 dependencyManagement

dependencyManagement用在父pom文件中,只有子pom中存在dependencyManagement中的依赖,才会从该依赖中继承未指定的配置,如spring boot中的版本号。

3.4 资源插件

maven默认资源插件负责将项目中资源拷贝到输出目录中。默认资源放在src/main/resources中。

  • 更改默认资源文件夹

    <build>
       ...
       <resources>
         <resource>
           <directory>src/my-resources</directory>
         </resource>
       </resources>
       ...
    </build>
    
  • 多个资源目录

    <build>
    	...
       <resources>
         <resource>
           <directory>resource1</directory>
         </resource>
         <resource>
           <directory>resource2</directory>
         </resource>
         <resource>
           <directory>resource3</directory>
         </resource>
       </resources>
       ...
    </build>
    
  • 仅引入目录中匹配成功的资源

    <build>
        ...
        <resources>
            <resource>
                <directory>[your directory]</directory>
                <includes>
                  <include>**/*.txt</include>
                  <include>**/*.rtf</include>
                </includes>
            </resource>
            ...
        </resources>
        ...
    </build>
    
  • 引入目录中所有资源,除了匹配成功的

    <build>
        ...
        <resources>
            <resource>
                <directory>src/my-resources</directory>
                <excludes>
                    <exclude>**/*.bmp</exclude>
                    <exclude>**/*.jpg</exclude>
                    <exclude>**/*.jpeg</exclude>
                    <exclude>**/*.gif</exclude>
                </excludes>
            </resource>
            ...
        </resources>
        ...
    </build>
    
  • <includes>引入的资源用<excludes>筛选:

    <build>
        ...
        <resources>
            <resource>
                <directory>src/my-resources</directory>
                <includes>
                    <include>**/*.txt</include>
                </includes>
                <excludes>
                    <exclude>**/*test*.*</exclude>
                </excludes>
            </resource>
            ...
        </resources>
        ...
    </build>
    

参考:Apache Maven Resources Plugin

其他

大致分为三维坐标、属性、依赖、插件和其他

maven三大内置生命周期;周期功能由插件提供;maven含有内置默认插件。

仓库分本地、远程。

properties定义属性,貌似可以被其他元素或插件使用。因此properties中元素名可以任意。

固定的目录结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值