Maven知识点速查

作者: 林檎果 | 来源:发表于2018-03-13 13:45 被阅读75次

    本文是学习项目管理利器——maven的Maven知识点速查

    前置知识:无

    Maven常用命令

    • compile 编译src/main/java文件
    • test 运行src/test/java下的带@Test的测试文件
    • package 打包src/main/java到target目录下生成jar包
    • install 打包并把jar包拷贝到本地仓库.m2下
    • deploy 打包并把jar包拷贝发布到远程仓库

    Maven命令行创建目录骨架

    • mvn archetype:generate

    Maven中的坐标和仓库

    • 构件通过坐标作为ID
    • 坐标包含
      • groupId
      • artifactId
      • Version
    • 仓库:
      • 本地仓库
      • 远程仓库

    Maven生命周期和插件

    生命周期:是一种工程的抽象

    • clean 清理
      • pre-clean
      • clean
      • post-clean
    • default 构建(最核心)
      • compile
      • test
      • package
      • install
    • site 生成站点
      • pre-site
      • post-site
      • site-deploy 发布站点
        插件:是对生命周期的实现
        使用插件
    <build>
        <plugins>
            <groupId>xxx</groupId>
            <artifactId>xxx</artifactId>
            <version>xxx</version>
            <executions>
                <phase>package</phase> <!-- 生命周期那个阶段 -->
                <goals>
                    <goal>jar-no-fork</goal><!--做什么事-->
                </goals>
            </executions>
        </plugins>
    </build>
    

    Maven的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">
        <modelVersion>4.0.0</modelVersion> <!--固定搭配 -->
        <groupId>反写的公司网址+项目名</groupId>   <!-- 坐标 -->
        <artifactId>项目名+模块名(项目中的一个模块)</artifactId>
        <packaging>jar</packaging> <!-- 打包,jar、war、zip、pom -->
        <version>1.0-SNAPSHOT</version>
        <!-- 0.x.x 表示大版本
        x.0.x 分支版本
        x.x.0 小版本
        0.0.1snapshot 快照 
        alpha 内测
        beta 公测
        release 稳定
        GA 正式发布 -->
        
        <name></name> <!--文档用-->
        <url></url> <!-- 项目地址 -->
        <description></description>
        <developers></developers>
        <lincences></lincences>
        <organization></organization>
        
        
        <denpendencies>
            <denpendency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>1.5.2.RELEASE</version>
                <type></type>
                <scope>test</scope>
                <optional></optional> <!-- 设置依赖是否可选 -->
                <exclusions><!-- 排除依赖,比如A->B->C,而A不想依赖C -->
                    <exclusion>
                    </exclusion>
                </exclusions>
            </denpendency>
        </denpendencies>
        
        <!-- 依赖管理,用在父模块中供继承用, -->
        <dependencyManagement>
            <denpendencies>
                <dependency></dependency>
            </denpendencies>
        </dependencyManagement>
        
        <build>
            <!-- 插件列表 -->
            <plugins>
                <plugin>
                    <groupId></groupId>
                    <artifactId></artifactId>
                    <version></version>
                </plugin>
            </plugins>
        </build>
        
        <!-- 继承 -->
        <parent></parent>
        <!-- 模块 -->
        <modules>
            <module>
            </module>
        </modules>
    

    Maven依赖范围

    <scope>test</scope>

    1. compile 默认编译和运行都有效
    2. test 测试
    3. runtime 运行和测试时有效
    4. provided 编译和测试有效
    5. import 只用在dependencyManagement中,表示从其他pom导入dependency的配置

    Maven依赖传递

    A->B->C,则A间接依赖C,A中会引入C的jar包,可以排除依赖用<exclusion></exclusion>,则C不见了

    Maven依赖冲突,则看规则

    1. 短路优先
      • A->B->C-X(jar) 不选这条
      • A->D->X(jar) ✅
    2. 先声明先优先:如果路径长度相同,则谁先声明,先解析谁

    Maven的聚合和继承

    聚合:<modules></modules>
    继承:<parent></parent>

    Maven的构建web项目

    在<plugin>里使用坐标标记的jetty或tomcat插件

    关于我:

    linxinzhe,全栈工程师,目前供职于某500强通信企业。人工智能,区块链爱好者。

    GitHub:https://github.com/linxinzhe

    欢迎留言讨论,也欢迎关注我~
    我也会关注你的哦!

    相关文章

      网友评论

        本文标题:Maven知识点速查

        本文链接:https://www.haomeiwen.com/subject/bmfofftx.html