681 分类: SSM,Maven

Maven

Maven简介

  1. Maven 是一款为 Java 项目构建管理、依赖管理的工具

    • Maven可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突
    • Maven 可以管理项目的编译、测试、打包、部署等构建过程。通过实现标准的构建生命周期
  2. Maven配置

    • 修改maven/conf/settings.xml
    <!-- localRepository
     | The path to the local repository maven will use to store artifacts.
     |
     | Default: ${user.home}/.m2/repository
    <localRepository>/path/to/local/repo</localRepository>
    -->
    <!-- conf/settings.xml 55行 -->
    <localRepository>D:\repository</localRepository>
    • 配置国内阿里镜像
    <!--在mirrors节点(标签)下添加中央仓库镜像 160行附近-->
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    • idea配置本地maven:构建工具配置file / settings / build / build tool / maven

Maven工程

1.GAVP属性

  1. GroupID 格式:com.{公司/BU }.业务线.[子业务线],最多 4 级。

    • 说明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一级;子业务线可选。
    • 正例:com.taobao.tddl 或 com.alibaba.sourcing.multilang com.atguigu.java
  2. ArtifactID 格式:产品线名-模块名
  3. Version版本号格式推荐:主版本号.次版本号.修订号 1.0.0

    • 主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能。
    • 次版本号:当做了向下兼容的功能性新增(新增类、接口等)。
    • 修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性。
    • 例如: 初始→1.0.0 修改bug → 1.0.1 功能调整 → 1.1.1等
  4. Packaging定义规则:指示将项目打包为什么类型的文件,idea根据packaging值,识别maven项目类型!

    • packaging 属性为 jar(不写为默认值jar),代表普通的Java工程,打包以后是.jar结尾的文件。
    • packaging 属性为 war,代表Java的web工程,打包以后.war结尾的文件。
    • packaging 属性为 pom,代表不会打包,用来做继承的父工程。

2.Maven工程项目结构

|-- pom.xml                               # Maven 项目管理文件 
|-- src
    |-- main                              # 项目主要代码
    |   |-- java                          # Java 源代码目录
    |   |   `-- com/example/myapp         # 开发者代码主目录
    |   |       |-- controller            # 存放 Controller 层代码的目录
    |   |       |-- service               # 存放 Service 层代码的目录
    |   |       |-- dao                   # 存放 DAO 层代码的目录
    |   |       `-- model                 # 存放数据模型的目录
    |   |-- resources                     # 资源目录,存放配置文件、静态资源等
    |   |   |-- log4j.properties          # 日志配置文件
    |   |   |-- spring-mybatis.xml        # Spring Mybatis 配置文件
    |   |   `-- static                    # 存放静态资源的目录
    |   |       |-- css                   # 存放 CSS 文件的目录
    |   |       |-- js                    # 存放 JavaScript 文件的目录
    |   |       `-- images                # 存放图片资源的目录
    |   `-- webapp                        # 存放 WEB 相关配置和资源
    |       |-- WEB-INF                   # 存放 WEB 应用配置文件
    |       |   |-- web.xml               # Web 应用的部署描述文件
    |       |   `-- classes               # 存放编译后的 class 文件
    |       `-- index.html                # Web 应用入口页面
    `-- test                              # 项目测试代码
        |-- java                          # 单元测试目录
        `-- resources                     # 测试资源目录

Maven核心功能

1.依赖管理和添加

<!-- 
   通过编写依赖jar包的gav必要属性,引入第三方依赖!
   scope属性是可选的,可以指定依赖生效范围!
   依赖信息查询方式:
      1. maven仓库信息官网 https://mvnrepository.com/
      2. mavensearch插件搜索
 -->
<dependencies>
    <!-- 引入具体的依赖包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!--
            生效范围
            - compile :main目录 test目录  打包打包 [默认]
            - provided:main目录 test目录  Servlet(tomcat中包含)
            - runtime: 打包运行           MySQL反射时
            - test:     test目录下生效     junit单元测试
         -->
        <scope>runtime</scope>
    </dependency>

</dependencies>

将版本号提取出来统一管理:

<!--声明版本-->
<properties>
  <!--命名随便,内部制定版本号即可!-->
  <junit.version>4.11</junit.version>
  <!-- 也可以通过 maven规定的固定的key,配置maven的参数!如下配置编码格式!-->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <!--引用properties声明版本 -->
    <version>${junit.version}</version>参数替换
  </dependency>
</dependencies>

2.依赖传递和冲突

依赖传递:Maven会自动解析和加载其所有的直接和间接依赖,确保这些依赖都可用。通过依赖传递的依赖,之间都不会存在版本兼容性问题。

依赖冲突:冲突路径短的包优先选择(未选择的包后续依赖都不会被引入),路径相同的按照声明顺序

3.构建管理

命令需要进入pom.xml同级文件夹下

命令描述
mvn clean清理编译或打包后的项目结构,删除target文件夹
mvn compile编译项目,生成target文件
mvn test执行测试源码 (测试)
mvn site生成一个项目依赖信息的展示页面
mvn package打包项目,生成war / jar 文件
mvn install打包后上传到maven本地仓库(本地部署)
mvn deploy只打包,上传到maven私服仓库(私服部署)

构建命令周期:触发周期后的命令,会自动触发周期前的命令

打包: mvn clean package
重新编译: mvn clean compile
本地部署: mvn clean install 

maven插件配置:

<build>
   <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

Maven继承和聚合特性

1.继承作用

在父工程中统一管理项目中的依赖信息,进行统一版本管理

2.继承语法

当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom

父工程
<groupId>com.atguigu.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

子工程gav标签写法:

  <parent> 
    <groupId>com.atguigu</groupId>  
    <artifactId>micro-shop</artifactId>  
    <version>1.0.1</version> 
  </parent>  
  <artifactId>user-service</artifactId>  
  <packaging>war</packaging>

父工程依赖进行统一管理,声明版本,并没有真正被引入工程

<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
  </dependencies>
</dependencyManagement>

子工程引用版本

<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。  -->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<!-- 当子工程指定版本号时,以子工程版本为准  -->
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
  </dependency>
</dependencies>

3.聚合概念

Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程

  1. 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
  2. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。

聚合语法:在父工程中的pom文件中:

<project>
  <modules>
    <module>child-project1</module>
    <module>child-project2</module>
  </modules>
</project>

#none

作者: zyk的zone

版权: 除特别声明,均采用BY-NC-SA 4.0许可协议,转载请表明出处

目录Content

-->