maven使用进阶,多模块管理

在这里插入图片描述

项目结构

|-- store(父项目)
|
|-- store-product(商品模块)
|
|-- store-common(工具模块)
|
|-- store-order(订单模块)
|
|-- store-system(系统功能模块)
|
|-- store-admin(项目的web入口文件) 

项目结构,举个例子 ↑

pom.xml

包含常用数据

<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/maven-v4_0_0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.kfm</groupId>  
    <artifactId>day1023_stage2</artifactId>  
    <packaging>war</packaging>  
    <version>1.0-SNAPSHOT</version>  
    <name>day1023_stage2 Maven Webapp</name>  
    <url>http://maven.apache.org</url>  
    <properties>  
        <maven.compiler.source>17</maven.compiler.source>  
        <maven.compiler.target>17</maven.compiler.target>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    </properties>  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>3.8.1</version>  
            <scope>test</scope>  
        </dependency>  
        <dependency>  
            <groupId>org.projectlombok</groupId>  
            <artifactId>lombok</artifactId>  
            <version>1.18.28</version>  
            <scope>compile</scope>  
        </dependency>  
        <dependency>  
            <groupId>commons-codec</groupId>  
            <artifactId>commons-codec</artifactId>  
            <version>1.15</version>  
        </dependency>  
        <dependency>  
            <groupId>javax.servlet</groupId>  
            <artifactId>javax.servlet-api</artifactId>  
            <version>4.0.1</version>  
            <scope>provided</scope>  
        </dependency>  
    </dependencies>  
    <build>  
        <finalName>day1023_stage2</finalName>  
    </build>  
</project>

exclusion排除某给项目

maven 标签

  • <groupId>:这是项目的组织或公司名称。通常,它与您的域名反向对应,例如,如果您的域名为 example.com,那么您的 groupId 可能是 com.example。这个元素的作用是为了将相关的项目组织在一起,并且在构建和依赖管理时提供一种分组的方式。

  • <artifactId>:这是项目本身的唯一名称。在一个组织内,不同的项目应该有不同的 artifactId。它代表了 Maven 仓库中的实际工件(如 JAR 文件),并且通常与项目的最终输出文件的名称相匹配。

在 Maven 的 pom.xml 文件中,有许多标签可以用于配置项目。以下是一些常见的标签:

  1. <modelVersion>:定义当前 POM 使用的模型版本。
  2. <groupId><artifactId>:如前所述,它们是项目的坐标。
  3. <version>:定义项目的版本号。
  4. <packaging>:定义项目的打包方式,例如 jarwarpom
  5. <name>:定义项目的显示名称。
  6. <description>:为项目提供简短的描述信息。
  7. <url>:指向项目主页或相关文档的 URL。
  8. <properties>:定义全局属性,可以在其他地方使用 ${property_name} 引用这些属性。
  9. <dependencies>:定义项目的依赖项列表,包括依赖的 groupId、artifactId、version 等信息。
  10. <dependencyManagement>:集中管理依赖项的版本,以便子项目可以继承这些版本。
  11. <build>:定义构建相关的设置,如插件、资源文件等。
  12. <plugins>:定义构建过程中的插件及其配置。
  13. <pluginManagement>:类似于 <dependencyManagement>,用于集中管理插件的版本和配置。
  14. <resources>:定义项目资源文件的处理规则。
  15. <testResources>:定义测试资源文件的处理规则。
  16. <profiles>:定义不同的构建环境(如开发、生产)下的不同配置。

这只是一部分常用的标签,Maven 还有很多其他的标签可以用来配置项目。你可以参考 Maven 官方文档了解更多详细信息:https://maven.apache.org/pom.html

多模块管理

packing标签指定打包的模式
默认是jar,如果pom文件中没有指定packaging 标签默认就是jar

Maven父工程必须遵循以下两点要求:

  1. packing标签必须是pom。
  2. 删除src目录。Maven会自动处理src目录下的文件和目录,不需要手动删除。

父类继承的两种模式:
使用dependencies标签表示子类会继承里面的依赖
使用dependencyManagement标签子类会选择继承里面的内容,不用写版本号。版本号由父类进行管理,如需特定版本可以进行书写

父子项目继承的书写

父项目pom.xml

在你的项目根目录下创建一个父项目(也叫做聚合项目)。这个项目的 pom.xml 文件将包含子模块的定义。在这个 pom.xml 文件中,你需要指定 <modules> 元素,其中包含所有子模块的相对路径。

<!-- 父项目的 pom.xml -->
<project>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<packaging>pom</packaging>
</project>

Maven的坐标GAV( groupId , artifactId , version )在这里进行配置,这些都是必须的。特殊的地方在于,这里的 packaging 为 pom ,所有带有子模块的项目的 packaging 都为 pom 。

子项目pom.xml

创建子模块,并定义模块之间的依赖关系在父项目所在的目录下创建子模块。每个子模块都应该有自己的 pom.xml 文件。子模块的目录结构可以根据你的项目需要进行设计。

<project>

<!-- 这里是父类组建的信息 -->
<parent>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<!-- 这里是父类组建pom.xml的相对路径 -->
<relativePath>../pom.xml</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>store-product</artifactId>

</project>
第一种方式

如上图所示

第二种方式 models

父组件不变,带上models 标签

models 只会包含父文件的子标签,不会包含孙子辈的标签

<!-- 父项目的 pom.xml -->
<project>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<packaging>pom</packaging>
</project>
<!-- moudule 内是子项目的artifactId -->
<modules>
    <module>child-001</module>
    <module>child-002</module>
</modules>

创建子组件和上个步骤相同

<project>

<!-- 这里是父类组建的信息 -->
<parent>
<groupId>com.kfm</groupId>
<artifactId>store</artifactId>
<version>0.1.0</version>
<!-- 这里省略父类组建pom.xml的相对路径 -->
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>store-product</artifactId>

</project>

新建子目录配置方式

1. 手动配置

字模块继承父组件,并在pom.xml中配置相关信息。

<parent>
<groupId>父组件名称</groupId>
<artifactId>parent的artifactId</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
2. idea自动配置

创建项目的时候选择父类是哪个,将会在父项目目录下建子类的项目。父项目没有src目录

dependencies标签

dependencies 中的依赖子类直接继承

<!-- 子模块会继承 dependencies 中的依赖 -->  
<dependencies>  
  
  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-test</artifactId>  
        <version>${spring.boot.version}</version>  
    </dependency>  
  
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->  
    <dependency>  
        <groupId>org.projectlombok</groupId>  
        <artifactId>lombok</artifactId>  
        <version>1.18.30</version>  
        <scope>provided</scope>  
    </dependency>  
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-devtools</artifactId>  
        <version>${spring.boot.version}</version>  
    </dependency>  
  
</dependencies>

dependencyManagement 标签

dependencyManagement 可选依赖,子模块可以通过声明来使用此依赖

<!-- 通过properties集中声明依赖的版本 -->
<properties>
<spring-boot-dependency>1.5.10.RELEASE</spring-boot-dependency>
</properties>

<dependencyManagement>

<dependencies>
<!-- spring的依赖形式 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot-dependency}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>

</dependencyManagement>

子文件中不用声明版本号。按需要声明版本号。

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
</parent>

插件 plugins 标签

直接在父目录配置,子组件都会有,比如java 编译级别

和dependencies用法类似

总结

父目录不允许有src目录,packaging 必须为pom,子目录可以有src目录,packaging 默认为jar

父目录管理依赖和版本号,子目录只需要调用父目录的依赖即可。

  • 依赖方式一:

    写dependencies (共同依赖,父类写了子类就有)
    dependencyManagement 管理父目录的依赖

    子目录parent中relativePath 调用父目录pom.xml 的位置,还有AVG

  • 依赖方式二:
    写dependencies
    dependencyManagement 管理子目录的依赖
    models 中写入子目录的artifactId

    子目录parent写AVG的位置

    groupid,artifactid,version

  • 27
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值