Maven基础知识(个人总结)

    声明: 1. 本文为我的个人复习总结, 并那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
              2. 由于是个人总结, 所以用最精简的话语来写文章
              3. 若有错误不当之处, 请指出

  • Maven 是一款自动化构建工具,专注服务于 Java 平台的项目构建依赖管理

    依赖, 就是jar包的意思

​ Make→Ant→Maven→Gradle→其他……

  • 安装好后

    1. 设置Path变量

    2. 设置镜像网站

    3. 修改JDK版本

    4. 修改本地仓库

  • 构建环节(构建不等于搭建)

    ①清理:删除以前的编译结果,为重新编译做好准备。

    ②编译:将 Java 源程序编译为字节码文件。

    ③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。

    ④报告:在每一次测试后以标准的格式记录和展示测试结果。

    ⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。 mvn source:jar是单独打包源码(类路径下),不含其他所用jar包

    ⑥安装:在 Maven 环境下特指将打包的结果 jar 包或 war 包安装到本地仓库中。

    ⑦部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

  • jar 包冲突时:

    ①路径最短者优先

    ②路径相同时先声明者优先

    即最短路径优先, 先声明者优先

  • <propertie>中属性可以重写父亲中的内容

  • 生命周期

    11.1 什么是 Maven 的生命周期

    Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建

    命令了。

    Maven 有三套相互独立的生命周期,分别是:

    ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

    ②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。

    ③Site Lifecycle 生成项目报告,站点,发布站点。

    再次强调一下它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。

    当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

    每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。

    比如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

    11.2 clean 生命周期

    Clean 生命周期一共包含了三个阶段:

    ①pre-clean 执行一些需要在 clean 之前完成的工作

    ②clean 移除所有上一次构建生成的文件

    ③post-clean 执行一些需要在 clean 之后立刻完成的工作

    11.3 Site 生命周期

    ①pre-site 执行一些需要在生成站点文档之前完成的工作

    ②site 生成项目的站点文档

    ③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

    ④site-deploy 将生成的站点文档部署到特定的服务器上

    这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强

    大的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。

    11.4 Default 生命周期

    Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,

    只解释一些比较重要和常用的阶段:

    validate

    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 接受编译好的代码,打包成可发布的格式,如 JAR。

    pre-integration-test

    integration-test

    post-integration-test

    verify

    install 将包安装至本地仓库,以让其它项目依赖。

    deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

    11.5 生命周期与自动化构建

    运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行 mvn install 的时候,代码会

    被编译,测试,打包。这就是 Maven 为什么能够自动执行构建过程的各个环节的原因。此外,Maven

    的插件机制是完全依赖 Maven 的生命周期的,因此理解生命周期至关重要

  • 插件与目标

    ●Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。

    ●每个插件都能实现多个功能,每个功能就是一个插件目标。

    ●Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。

  • dependencyManagement(只是做个声明并不是直接导入jar包到该工程以及子模块, 在子模块里实际用到jar包时, 才真正进行导入; 常用来父工程里做依赖的版本管理)

  • import(对单继承的扩展, 相当于多继承懒模式导入一些jar包)

  • 继承

    是为了让父pom的 dependencyManagement能替他管理jar包版本,

    以及继承父pom的 dependency中的jar包

  • 聚合

    是为了一键操作,让父亲(未必一定是父亲),不是父子也可以发生聚合,缕清孩子们之间的打包顺序, 为了快速的构建项目(构建不是搭建)

  • scope,默认为compile,也是活的最久的

    在这里插入图片描述

  • 坑处:

    • system不用管, 它只从本地仓库找jar包,不会从maven中央仓库找jar包
    • test, provided都会阻断依赖的传递
    • 所以想进行传递的依赖都会被打包进去, 建议想只在idea里用&&又想依赖传递
    • parent工程里需要去掉spring-boot的maven打包插件,因为里插件会继承, 不然子模块里的非服务工程会报找不到main.class
    • SpringBoot打包, 祖先工程为spring-boot-starter-parent,且使用专用的maven打包插件
    • maven的某个jar包不想依赖传递,千万别用scope provide的方式,因为这样会在运行期类不起作用,报ClassNotFoundException,可以使用true的方式阻止依赖传递
    • 打包是在运行后面的
  • 打包时跳过单元测试:

    mvn package -DskipTests,不执行测试用例,但编译测试用例类到target/test-classes下。

    mvn package -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

  • maven安装jar包到本地

    mvn install:install-file  -Dfile=E:\\phoenix-core-5.0.0-HBase-2.0.jar  -DgroupId=org.apache.phoenix 
    -DartifactId=phoenix-core  -Dversion=5.0.0-HBase-2.0  -Dpackaging=jar
    
  • 打包用的shade插件

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.2.1</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <!-- 修改Main类名 -->
                                        <mainClass>com.hellosrc.count.BiliBiliTimeCountMain</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值