zoukankan      html  css  js  c++  java
  • 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的相关信息放到代码库中, 开发人员统一版本
  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/13060097.html
Copyright © 2011-2022 走看看