• Java笔记14


    Maven介绍

    • Maven主要功能;
      • 提供了一套标准化的项目结构;
      • 提供了一套标准化的构建流程 (编译, 测试, 打包, 发布..);
      • 提供了一套依赖管理机制

    Maven项目接口

    a-maven-project // 项目名称
    ├── pom.xml // 项目描述文件
    ├── src
    │ ├── main
    │ │ ├── java // 存放java源码目录
    │ │ └── resources // 存放资源文件目录
    │ └── test
    │ ├── java // 存放测试源码
    │ └── resources // 存放测试资源
    └── target // 所有打包, 编译生成的文件都放到这

    <project ...>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.itranswarp.learnjava</groupId> // 组织, 公司名称
      <artifactId>hello</artifactId> // 项目名称
      <version>1.0</version> // 版本号
      <packaging>jar</packaging>
      <properties>
            ...
      </properties>
      <dependencies>
            <dependency> // 声明一个依赖, maven会自动下载
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>
      </dependencies>
    </project>
    
    • groupId, artifactId, version用来确定一个项目

    依赖管理

    • 自动解析各个依赖

    依赖关系

    • compile: 编译时, 需要用到的jar包(默认), 例如: commons-logging

      • 自动放入classpath
    • test: 编译Test时, 需要用到的jar包, 例如: junit

      • 仅在测试时用到, 正常运行时不需要
    • runtime: 编译时不需要, 但运行时需要用到 例如: mysql

    • provided: 编译时需要用到, 但运行时由JDK或某个服务器提供 例如: servlet-api

      • 编译时需要, 但运行时不需要, 因为Servlet服务器内置了相关的jar.
    • maven维护了一个中央仓库, 所有的依赖包都在上面

    • 本地设置缓存, 一旦下载过, 就永久安全的存放在本地, 不会重复下载

    • -SNAPSHOT开发版本, 每次都会重复下载

    唯一ID

    • 三段确定一个唯一id, 一经发布无法修改, 只能发布新的版本

    Maven镜像

    • 使用国内提供的镜像仓库进行下载

    • search.maven.org进行搜索

    • mvn clean package进行打包构建

    构建流程

    • Maven有一套标准化的构建流程, 可以自动化实现编译, 打包, 发布等等

    Lifecycle和Phase

    • 内置生命周期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
    • 生命周期clean:

      • pre-clean
      • clean (注意这个clean不是lifecycle而是phase)
      • post-clean
    • mvn package: 执行default生命周期, 执行到package

    • mvn clean compile: 先执行clean生命周期, 到cleanphase, 再运行default生命周期到compilephase

    • 常用的:

      • clean: 清理
      • compile: 编译
      • test: 运行测试
      • package: 打包
    • mvn [phase]: 自动执行到某个lifecycle的某个phase

    Goal

    • 执行一个phase处罚一个或者多个goal
    • lifecycle > phase > goal
    • 少数直接运行goal: mvn tomcat:run: 直接运行了tomcat生命周期下面的一个goal
    • 举例: phase -> goal&goal
      • compile -> compiler:compile
      • test -> compiler:testCompiler&surefile:test
    • 执行goal都是插件:goal名称

    使用插件

    • 执行mvn compile: 会自动执行compile这个phase, 这个phase会自动执行compiler插件关联的compiler:compile这个goal
    • 执行每个phase都会通过插件(plugin)进行执行.
    • 只是会找到compiler这个插件, 然后执行默认的compiler:compile这个goal来执行
    • 使用Maven, 就是配置好需要使用的插件, 然后通过phase进行调用
    • phase名称: 对应的插件名称
      • clean: clean
      • compile: compiler
      • test: surefire
      • package: jar

    自定义插件

    • 引入自定义插件, 并按照规则在指定的phase进行声明, 执行声明的goal
    • 并根据插件需要的参数进行配置
    • 常用的插件:
      • maven-shade-plugin: 打包所有的依赖包并生成可执行的jar
      • cobertura-maven-plugin: 生成单元测试覆盖率报告
      • findbugs-maven-plugin: 对java源码进行分析, 找出潜在问题

    模块管理

    • 建立maven模块
    • 父级目录下建立parent文件夹, 并建立可集成的配置文件
    • 每个模块下建立自己的配置文件
    • 在根目录下建立一个pom.xml, 并声明所有的module, 进行统一的打包管理

    使用mvnw

    • 单独项目使用特定版本的maven
    • 可以把mvnw的相关信息放到代码库中, 开发人员统一版本
  • 相关阅读:
    「BZOJ1061」 [Noi2008]志愿者招募
    [POJ 2891] Strange Way to Express Integers (扩展中国剩余定理)
    扩展中国剩余定理学习笔记
    扩展欧几里得算法+推论
    SPOJ16607 IE1
    [Luogu P4124] [CQOI2016]手机号码 (数位DP)
    [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)
    一些很妙的网站
    [Luogu P3157][CQOI2011]动态逆序对 (树套树)
    [Luogu P3203] [HNOI2010]弹飞绵羊 (LCT维护链的长度)
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/13060097.html
Copyright © 2020-2023  润新知