您现在的位置是:首页 >技术杂谈 >引入父项目<scope>import</scope>和<type>pom</type>等的作用网站首页技术杂谈
引入父项目<scope>import</scope>和<type>pom</type>等的作用
简介引入父项目<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,可以确保依赖项被正确地处理和使用,避免出现编译、打包等问题。
默认根据依赖项的文件后缀名来推断依赖类型
确保依赖项被正确地处理和使用,避免出现编译、打包问题
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。