引入父项目<scope>import</scope>和<type>pom</type>等的作用

<?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>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lskisme</groupId>
    <artifactId>sentinel-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <packaging>pom</packaging>
    <modules>
        <module>order-service</module>
        <module>user-service</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2022.0.2</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0-RC1</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

Packing 指定打包生成构建产物的类型

<packaging>pom</packaging>

packing是Maven中用来指定项目打包类型的元素。Maven支持多种打包类型,常见的包括:

jar:Java应用程序或库
war:Java Web应用程序
ear:Java Enterprise应用程序
pom:Maven项目管理模块
maven-plugin:Maven插件

通过指定packing元素,可以告诉Maven如何打包项目,生成相应的构建产物。例如,如果指定为jar,Maven会将项目打包为一个可执行的jar文件;如果指定为war,Maven会将项目打包为一个Web应用程序的war文件。
默认使用jar作为打包类型
在Maven中,如果没有指定packing元素,Maven会默认使用jar作为打包类型。但是,对于不同类型的项目,应该选择相应的打包类型,以便生成正确的构建产物。
需要注意的是,不同的打包类型会影响项目的结构和依赖关系,因此需要根据实际情况选择合适的打包类型。
设为pom不会生成任何构建产物,只用于管理依赖关系。
将Maven项目的packing元素设为pom,表示这个项目不是一个可执行的Java应用程序或库,而是一个纯粹的Maven项目模块,它不会生成任何构建产物,只用于管理依赖关系。

在实际开发中,通常会将一些公共的配置信息放在一个父项目中,然后在子项目中通过继承来使用这些配置信息。
这个父项目的packaging元素通常会设为pom,因为它不需要生成任何构建产物,只用于管理子项目的依赖关系。

另外,有些Maven插件也需要作为一个纯粹的Maven项目模块来使用,这时候也会将packaging元素设为pom。
这些插件通常不需要生成任何构建产物,而是用于提供一些构建任务和目标,供其他项目使用。

modules 聚合构建

聚合用于快速构建maven工程,一次性构建多个项目/模块。在model标签中的pom都执行相同操作

<packaging>pom</packaging>
<modules>
   <module>order-service</module>
   <module>user-service</module>
</modules>

注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关

继承

parent 指定当前项目的父项目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.5</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
继承父项目中的配置信息
子项目中覆盖和修改父项目中的配置信息。
避免子项目重复定义groupId和version
在Maven中,每个项目都应该有一个唯一的groupId和artifactId,但是version可以通过继承来自父项目。
因此,使用parent元素可以避免在每个子项目中都重复定义groupId和version。

parent元素的常见配置包括:

groupId、artifactId、version:指定父项目的groupId、artifactId和version,用于确定父项目的坐标。
relativePath:指定父项目的相对路径,用于在本地文件系统中查找父项目的pom.xml文件。
modules:指定子项目的模块列表,用于确定子项目的结构和依赖关系。

使用parent元素可以简化项目的管理和维护,避免重复定义相同的配置信息,提高开发效率和代码质量。

dependencyManagement管理子项目依赖项的版本

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2022.0.2</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        <dependencies>
<dependencyManagement>
避免在子项目中重复定义依赖项版本号

我在创建的maven子模块中要引入spring-cloud-starter-loadbalancer的依赖,不想指定版本号,maven能搞定吗?

就要在maven父工程中使用dependencyManagement标签继承有定义spring-cloud-starter-loadbalancer版本信息的pom项目,而spring-cloud-dependencies就是官方定义的所有版本对应信息
Maven会自动使用spring-cloud-dependencies项目中定义的版本号。
定义控制项目中所有依赖项的版本一致

确保项目中的依赖项版本一致。

总之使用dependencyManagement,可以在父项目中定义依赖项的版本信息,然后在子项目中引用这些依赖项时,不需要指定版本号,Maven会自动使用父项目中定义的版本号。简化了项目的管理和维护。

scope控制依赖项不同阶段的可见性和使用范围

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-dependencies</artifactId>
     <version>2022.0.2</version>
     <scope>import</scope>
     <type>pom</type>
</dependency>

Maven中有以下几种scope:

编译、测试、运行

compile: 默认scope,全程可见和使用。
provided: 编译、测试可见和使用,
					打包时不会被打包进去,要由运行环境提供使用。
runtime: 只运行阶段可见和使用
test:	  只测试阶段可见和使用

还有两种特别的scope

import:  表示依赖项只用于管理子模块的依赖关系,不会被子模块添加使用
system:   表示依赖项来自本地系统,需要通过systemPath指定依赖项的路径。
import:表示依赖项只用于管理子模块的依赖关系,不会被子模块添加使用

避免不必要的依赖项被打包进去,减小打包文件的大小,

避免重复依赖项版本冲突
type指定依赖项类型

默认情况下,Maven会根据依赖项的文件后缀名来推断类型,例如jar、war、pom等。但对于一些非标准的文件类型,需要使用type来明确指定。

常见的type类型包括:

jar:Java应用程序或库
war:Java Web应用程序
pom:Maven项目模块
ear:Java Enterprise应用程序
rar:Java资源适配器
ejb:Enterprise Java Bean
maven-plugin:Maven插件
test-jar:测试用的Java应用程序或库

通过指定type,可以确保依赖项被正确地处理和使用,避免出现编译、打包等问题。

默认根据依赖项的文件后缀名来推断依赖类型
确保依赖项被正确地处理和使用,避免出现编译、打包问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值