Jar包管理工具Maven-高级篇

简介: Jar包管理工具Maven-高级篇

一、 Maven的依赖传递

在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。 假设A依赖B,B依赖C,那么我们可以根据maven项目依赖的特征不难推出项目A也依赖C。

网络异常,图片无法展示
|
网络异常,图片无法展示
|

  • 优点:减少坐标的编写
  • 缺点:可能会造成版本冲突

二、如何解决依赖冲突
网络异常,图片无法展示
|

2.1 依赖调节原则

① 第一声明优先原则

  • 在 pom 文件中定义依赖(坐标),谁先声明就用谁

网络异常,图片无法展示
|

② 路径近者优先原则

  • 在pom 文件中定义依赖(坐标),谁的路径近就用谁

网络异常,图片无法展示
|

2.2 排除依赖

  • 通过在pom文件,通过exclusions标签排不需要的依赖jar包

网络异常,图片无法展示
|

2.3 版本锁定

在pom文件中,直接指定项目依赖的所有版本号,导入依赖的时候就不需要指定版本

  1. properties中定义所有的公共版本号常量
  2. 通过dependencyManagement锁定版本号:不会导入依赖jar包
  3. dependencies导入依赖:不需要指定版本号
<?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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.csjava</groupId>
    <artifactId>maven-helloworld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--
        集中声明和管理项目依赖的jar版本信息
    -->
    <properties>
        <spring.version>5.1.5.RELEASE</spring.version>
        <junit.version>4.13</junit.version>
    </properties>
    <!--介绍和演示maven解决jar冲突之:版本锁定   架构师、技术经理  -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.3</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--jar依赖操作 程序猿 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
    </dependencies>
</project>

三、Maven分模块构建

3.1 什么是分模块构建

在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大,所以汽车厂商都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。

网络异常,图片无法展示
|
在企业项目开发过程中,由于项目规模庞大,业务复杂,参与的人员比较多,一般会通过合理的模块拆分将一个大型的项目拆分为N多个小模块,分别进行开发。而且拆分出的模块可以非常容易的被其他模块复用。

常见的拆分方式有两种:

  • 按照业务模块进行拆分,例如将一个项目分为用户模块、订单模块、购物车模块等,每个模块对应就是一个maven工程
  • 按照进行拆分,例如持久层、业务层、表现层等,每个层对应就是一个maven工程不管是上面哪种拆分方式,通常都会提供一个父工程,将一些公共的代码和配置提取到父工程中进行统一管理和配置。
    网络异常,图片无法展示
    |

3.2 maven工程继承

在Java语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非private的属性和方法。

同样,在maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码

① 创建父工程

网络异常,图片无法展示
|

<!--父工程引入坐标-->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.5.RELEASE</version>
    </dependency>
</dependencies>

② 创建子(工程)模块

网络异常,图片无法展示
|

3.3 maven工程聚合

在maven工程的pom.xml文件中可以使用 标签将其他maven工程聚合到一起,聚合的目的是为了进行统一操作

网络异常,图片无法展示
|

注意:继承和聚合本质上没啥关系,通常情况下父工程会聚合管理的子模块(工程)

3.4 创建子模块方式

网络异常,图片无法展示
|
网络异常,图片无法展示
|


相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
3月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
12天前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
42 10
|
8天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
20 3
|
25天前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
|
3月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
4月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
459 2
[JarEditor]可直接修改jar包的IDEA插件
|
3月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
52 1
|
3月前
|
Java 编译器 测试技术
项目管理工具Maven的简单配置示例
【8月更文挑战第11天】这段内容介绍了如何通过Maven快速搭建并配置一个Java项目。首先需确保已安装Maven,接着可通过命令行创建一个基础项目结构,定义`groupId`、`artifactId`等基本信息。项目根目录下的`pom.xml`文件是核心配置文件,用于声明依赖库如JUnit,并配置构建插件如Maven Compiler Plugin以指定Java编译版本。最后,通过执行`mvn clean install`命令完成项目的清理与构建。这个流程适合初学者快速上手Maven项目管理。
|
3月前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)

推荐镜像

更多