Maven核心概念

1 Maven工程的GAVP

Maven 中的 GAVP 是指 GroupIdArtifactIdVersionPackaging 等四个属性的缩写,其中前三个是必要的,而 Packaging 属性为可选项。

这四个属性主要为每个项目在maven仓库中做一个标识,方便项目之间相互引用。

  • GAV

    • G

      即GroupId,格式为com.{公司/BU }.业务线.[子业务线],最多 4 级。

      说明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一级;子业务线可选。

      例如:com.taobao.tddl 或 com.alibaba.sourcing.multilang

    • A

      即ArtifactID,格式为产品线名-模块名。语义不重复不遗漏,例如:tc-client / uic-api / tair-tool / bookstore

    • V

      即Version版本号格式推荐:主版本号.次版本号.修订号

      1) 主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能。

      2) 次版本号:当做了向下兼容的功能性新增(新增类、接口等)。

      3) 修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性。

  • P

    即Packaging,指将项目打包为什么类型的文件,IntelliJ IDEA根据packaging值识别maven项目类型,packaging的可选值如下:

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

2 Maven工程构建

2.1 构建概念和过程

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,主要方便大型项目的自动化构建和部署,大大降低了项目的出错风险和提高开发效率。

常见的构建工具包括 Maven、Gradle、Ant 等。

2.2 构建的方式
2.2.1 命令构建

常用的构建命令如下:

命令 描述
mvn compile 编译项目,生成target文件
mvn package 打包项目,生成jar或war文件
mvn clean 清理编译或打包后的项目结构
mvn install 打包后上传到maven本地仓库
mvn deploy 只打包,上传到maven私服仓库
mvn site 生成站点
mvn test 执行测试源码
2.2.2 可视化构建

clean : 清理

compile :编译

test :测试

package :打包

install :安装

deploy :部署

3 Maven依赖管理

Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。

通过定义 POM 文件,Maven 能够自动解析项目的依赖关系,并通过 Maven 仓库自动下载和管理依赖,从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。

3.1 POM解析
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <!-- 
    	父工程GAV坐标信息
	-->
    <parent>
        <artifactId>giser-java</artifactId>
        <groupId>com.giser</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <!-- pom的版本信息 -->
    <modelVersion>4.0.0</modelVersion>
	<!-- 当前项目的唯一标识-->
    <artifactId>giser-java-mybatis</artifactId>
    <!--
		项目打包方式:jar(默认)、war、pom
		默认为jar,项目被打成jar包
		war:用于web工程,打为war包
		pom:作为父工程,被其他工程聚合或继承,不会被打包		
	-->
    <packaging>pom</packaging>

	<!-- 当前工程的子模块信息 -->
    <modules>
        <module>giser-java-mybatis-demo</module>
        <module>giser-java-mybatis-param</module>
        <module>giser-java-mybatis-resultmap</module>
        <module>giser-java-mybatis-dynamic-sql</module>
        <module>giser-java-mybatis-cache</module>
        <module>giser-java-mybatis-generator-simple</module>
        <module>giser-java-mybatis-generator-vip</module>
        <module>giser-java-mybatis-pagehelper</module>
    </modules>
	<!-- 依赖管理:作为父工程,定义子工程依赖的版本信息 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
	<!-- 属性信息:
			依赖版本统一提取和维护
		定义共用的常量,如版本信息
		参数命名有两种: 
			①maven中固定的key,如maven.compiler.source
			②自定义key,如mybatis.version
	-->
    <properties>
    	
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mybatis.version>3.5.14</mybatis.version>
        <mysql.version>8.0.33</mysql.version>
    </properties>

</project>
3.2 依赖范围

依赖范围(scope)主要用于设置jar包的作用范围,如编译环境、测试环境、运行环境等。

依赖范围 描述
compile 编译依赖范围,scope 元素的缺省值。使用此依赖范围的 Maven 依赖,对于三种 classpath 均有效,即该 Maven 依赖在上述三种 classpath 均会被引入。例如,log4j 在编译、测试、运行过程都是必须的。
test 测试依赖范围。使用此依赖范围的 Maven 依赖,只对测试 classpath 有效。例如,Junit 依赖只有在测试阶段才需要。
provided 已提供依赖范围。使用此依赖范围的 Maven 依赖,只对编译 classpath 和测试 classpath 有效。例如,servlet-api 依赖对于编译、测试阶段而言是需要的,但是运行阶段,由于外部容器已经提供,故不需要 Maven 重复引入该依赖。
runtime 运行时依赖范围。使用此依赖范围的 Maven 依赖,只对测试 classpath、运行 classpath 有效。例如,JDBC 驱动实现依赖,其在编译时只需 JDK 提供的 JDBC 接口即可,只有测试、运行阶段才需要实现了 JDBC 接口的驱动。
system 系统依赖范围,其效果与 provided 的依赖范围一致。其用于添加非 Maven 仓库的本地依赖,通过依赖元素 dependency 中的 systemPath 元素指定本地依赖的路径。鉴于使用其会导致项目的可移植性降低,一般不推荐使用。
import 导入依赖范围,该依赖范围只能与 dependencyManagement 元素配合使用,其功能是将目标 pom.xml 文件中 dependencyManagement 的配置导入合并到当前 pom.xml 的 dependencyManagement 中。
3.3 构建依赖

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

默认情况下,构建不需要额外配置,都有对应的缺省配置。当然了,我们也可以在pom.xml定制一些配置,来修改默认构建的行为和产物!

  • 指定打包命名
xml 复制代码
<!-- 默认的打包名称:artifactid+verson.打包方式 -->
<build>
  <finalName>mybatis-service</finalName>
</build>  
  • 指定打包文件
    默认打包的文件包括:java文件夹中的java类,或按照Maven工程结构放置的文件。
    默认不被打包的文件:java文件夹中的xml文件,及没有按照Maven工程结构放置的文件。
    此时可以使用resources标签,指定要打包资源的文件夹要把哪些静态资源打包到 classes根目录下。
xml 复制代码
<build>
    <!--设置要打包的资源位置-->
    <resources>
        <resource>
            <!--设置资源所在目录-->
            <directory>src/main/java</directory>
            <includes>
                <!--设置包含的资源类型-->
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>
  • 配置依赖插件
    常用的插件:指定jdk版本、tomcat插件、mybatis分页插件、mybatis逆向工程插件等。
xml 复制代码
<build>
  <plugins>
      <!-- java编译插件,配jdk的编译版本 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>17</source>
          <target>17</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <!-- tomcat插件 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
         <version>2.2</version>
          <configuration>
          <port>8081</port>
          <path>/</path>
          <uriEncoding>UTF-8</uriEncoding>
          <server>tomcat7</server>
        </configuration>
      </plugin>
    </plugins>
</build>
相关推荐
Java探秘者4 分钟前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
攸攸太上4 分钟前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
2301_786964369 分钟前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
2303_8120444613 分钟前
Bean,看到P188没看了与maven
java·开发语言
苹果醋313 分钟前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
秋夫人15 分钟前
idea 同一个项目不同模块如何设置不同的jdk版本
java·开发语言·intellij-idea
m0_6640470220 分钟前
数字化采购管理革新:全过程数字化采购管理平台的架构与实施
java·招投标系统源码
aqua353574235840 分钟前
蓝桥杯-财务管理
java·c语言·数据结构·算法
Deryck_德瑞克40 分钟前
Java网络通信—TCP
java·网络·tcp/ip
砥砺code41 分钟前
【2024版本】Mac/Windows IDEA安装教程
java