多Pom文件项目,如何维护好jar包版本?

拆分模块原因

使用Java技术开发的工程,随着时间的推移,代码增多,目录结构变复杂,这时候工程的进展就会遇到各种问题:
(1)不同业务的代码相互耦合。系统出现问题后难排查定位、修正。
(2)增加了新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个项目的结构。
(3)开发者对自己或者他人负责的代码边界很模糊,修改了他人负责的代码但对方不知道,责任追踪很麻烦。

因此,我们可以把项目拆成多个模块。
多模块的划分可以降低代码之间的耦合性(从类级别的耦合提升到jar包级别的耦合),模块还规范了代码边界的划分,开发者很容易通过模块确定自己所负责的内容。 对于maven管理的项目,每个模块都对应着一个pom.xml。

拆分案例

例如,一个项目被我们分为了会员,仓库,订单几个部分,我们会看到一些包名:

	org.myorg.app.user
	org.myorg.app.repository
	org.myorg.app.order

对应的Maven模块结构是这样的:

	app-parent
		|-- pom.xml 
		|
		|-- app-user
		|      |-- pom.xml 
		|
		|-- app-repository
		|      |-- pom.xml 
		|
		|-- app-order
		|      |-- pom.xml 

子模块比较多的时候,经常会遇到jar包版本难统一,有冲突难排查的情况。为了使不同的子项目中的相同依赖的版本保持一致,一般在parent项目的pom文件中使用dependencyManagement维护相关依赖。

1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
2.pom.xml文件中,jar的版本判断的两种途径
	2.1 如果dependencies中的dependency声明了version,都以dependency里的version为准。
	2.2 如果dependencies里的dependency自己没有声明version元素,那么maven就会dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错。

pom文件示例

在这里插入图片描述
父级pom文件

<?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>com.suncy</groupId>
    <artifactId>course-reminder</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>course-reminder-app</module>
        <module>course-reminder-common</module>
    </modules>

    <!--版本-->
    <properties>
        <commons-codec>1.9</commons-codec>
    </properties>

    <!--jar包版本管理-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--导入jar包-->
    <dependencies>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
    </dependencies>

</project>

子级pom文件

<?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">
    <parent>
        <artifactId>course-reminder</artifactId>
        <groupId>com.suncy</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>course-reminder-common</artifactId>

    <dependencies>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
    </dependencies>
</project>

猜你喜欢

转载自blog.csdn.net/weixin_44532671/article/details/121642685