首页 > 其他分享 >Maven_pom文件解读

Maven_pom文件解读

时间:2023-10-09 21:49:18浏览次数:37  
标签:解读 spring springframework Maven pom RELEASE org maven

Maven核心概念:POM

  1. 含义
    POM:Project Object Model,项目对象模型。和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现。

  2. 模型化思想
    POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。我们在开发过程中,最基本的做法就是将现实生活中的事物抽象为模型,然后封装模型相关的数据作为一个对象,这样就可以在程序中计算与现实事物相关的数据。

  3. 对应的配置文件
    POM 理念集中体现在 Maven 工程根目录下 pom.xml 这个配置文件中。所以这个 pom.xml 配置文件就是 Maven 工程的核心配置文件。其实学习 Maven 就是学这个文件怎么配置,各个配置有什么用

自动生成的 pom.xml 解读

<!-- 当前Maven工程的坐标 -->
  <groupId>com.atguigu.maven</groupId>
  <artifactId>pro01-maven-java</artifactId>
  <version>1.0-SNAPSHOT</version>
  
  <!-- 当前Maven工程的打包方式,可选值有下面三种: -->
  <!-- jar:表示这个工程是一个Java工程  -->
  <!-- war:表示这个工程是一个Web工程 -->
  <!-- pom:表示这个工程是“管理其他工程”的工程 -->
  <packaging>jar</packaging>

  <name>pro01-maven-java</name>
  <url>http://maven.apache.org</url>

  <properties>
	<!-- 工程构建过程中读取源码时使用的字符集 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!-- 当前工程所依赖的jar包 -->
  <dependencies>
	<!-- 使用dependency配置一个具体的依赖 -->
    <dependency>
	
	  <!-- 在dependency标签内使用具体的坐标依赖我们需要的一个jar包 -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
	  
	  <!-- scope标签配置依赖的范围 -->
      <scope>test</scope>
    </dependency>
  </dependencies>

继承子pom解读

<!-- 使用parent标签指定当前工程的父工程 -->
<parent>
    <!-- 父工程的坐标 -->
    <groupId>com.maven</groupId>
    <artifactId>pro03-maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<!-- 子工程的坐标 -->
<!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
<!-- <groupId>com.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->

统一依赖管理

<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>4.0.0.RELEASE</version>
		</dependency>
	</dependencies>
</dependencyManagement>

子工程中引用那些被父工程管理的依赖

关键点:省略版本号

<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。	-->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-expression</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
	</dependency>
</dependencies>

在父工程中声明自定义属性

<!-- 通过自定义属性,统一指定Spring的版本 -->
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!-- 自定义标签,维护Spring版本数据 -->
	<spring.version>4.3.6.RELEASE</spring.version>
</properties>

在需要的地方使用${}的形式来引用自定义的属性名:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>

依赖范围

  1. import
    管理依赖最基本的办法是继承父工程,但是和 Java 类一样,Maven 也是单继承的。如果不同体系的依赖信息封装在不同 POM 中了,没办法继承多个父工程怎么办?这时就可以使用 import 依赖范围。

    典型案例当然是在项目中引入 SpringBoot、SpringCloud 依赖:

    <dependencyManagement>
        <dependencies>
    
            <!-- SpringCloud 依赖导入 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    
            <!-- SpringCloud Alibaba 依赖导入 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
    
            <!-- SpringBoot 依赖导入 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    import 依赖范围使用要求:

    • 打包类型必须是 pom
    • 必须放在 dependencyManagement 中
  2. system
    以 Windows 系统环境下开发为例,假设现在 D:\tempare\atguigu-maven-test-aaa-1.0-SNAPSHOT.jar 想要引入到我们的项目中,此时我们就可以将依赖配置为 system 范围:

    <dependency>
        <groupId>com.atguigu.maven</groupId>
        <artifactId>atguigu-maven-test-aaa</artifactId>
        <version>1.0-SNAPSHOT</version>
        <systemPath>D:\tempare\atguigu-maven-test-aaa-1.0-SNAPSHOT.jar</systemPath>
        <scope>system</scope>
    </dependency>
    
  3. runtime
    专门用于编译时不需要,但是运行时需要的 jar 包。比如:编译时我们根据接口调用方法,但是实际运行时需要的是接口的实现类。典型案例是:

    <!--热部署 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    

标签:解读,spring,springframework,Maven,pom,RELEASE,org,maven
From: https://www.cnblogs.com/yuxl94/p/17753221.html

相关文章

  • Maven基础概念
    Maven核心概念:坐标使用三个『向量』在『Maven的仓库』中唯一的定位到一个『jar』包。groupId:公司或组织的idgroupId:公司或组织域名的倒序,通常也会加上项目名称例如:com.atguigu.mavenartifactId:一个项目或者是项目中的一个模块的idartifactId:模块的名称,将来作为Maven......
  • Maven构建过程
    清理:删除上一次构建的结果,为下一次构建做好准备编译:Java源程序编译成*.class字节码文件测试:运行提前准备好的测试程序报告:针对测试的结果生成一个全面的信息打包:Java工程(jar包)Web工程(war包)安装:把一个Maven工程经过打包操作生成的工程包存入到Maven仓库......
  • Maven常见命令
    要求运行Maven中和构建操作相关的命令时,必须进入到pom.xml所在的目录。如果没有在pom.xml所在的目录运行Maven的构建命令,那么会看到下面的错误信息:ThegoalyouspecifiedrequiresaprojecttoexecutebutthereisnoPOMinthisdirectory清理操作mvnclean效......
  • Maven安装
    常用地址官网https://archive.apache.org中央仓库https://mvnrepository.com下载地址https://archive.apache.org/dist/maven/binaries配置Maven本地仓库修改./conf/settings.xml添加<localRepository>xxxxx</localRepository>配置前<!--localRepository|Thep......
  • Maven依赖
    依赖说明如果A工程里面用到的了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖BMaven中的具体问题jar包的下载:使用Maven之后,jar包会从规范的远程仓库下载到本地jar包之间的依赖:通过依赖的传递性自动完成jar包之间的冲突:通过对依赖的配置进行调整,让某些Jar......
  • Maven继承
    继承说明Maven工程之间,A工程继承B工程B工程:父工程A工程:子工程本质上是A工程的pom.xml中的配置继承了B工程中pom.xml的配置。作用在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。它的背景是:对一个比较大型的项目进行了模块拆分。一个......
  • Maven
    一、Maven加载原理Maven工具会根据pom模型(pom.xml)加载当前项目需要使用的资源。每次加载都是从本机某个指定的文件夹去加载。如果本机文件夹中没有这个资源,会从Maven远程服务器中下载到本机文件夹,Maven再去加载本机文件夹中资源。专业概念:中央仓库(CentralRepository):Maven......
  • maven多模块版本统一管理
    maven多模块版本统一管理结构:父模块子1模块依赖子2模块子2模块父模块定义<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-p......
  • 用Artifactory管理内部Maven仓库
    1.介绍Maven是Java开发者中流行的构建工具,Maven的好处之一是可以帮助减少构建应用程序时所依赖的软件构件的副本,Maven建议的方法是将所有软件构件存储于一个叫做repository的远程仓库中。Maven会从ibiblio.org中的公用仓库中同步构件,这个公用仓库下载缓慢、不稳定,并且......
  • 在Eclipse中使用Maven 2.x指南
    1.Maven2RepositoryEclipse需要知道Maven的本地仓库的路径。所以,类路径变量M2_REPO必须设置。执行以下命令:mvn-Declipse.workspace=<path-to-eclipse-workspace>eclipse:add-maven-repo 你也可以在eclipse内定义一个新的classpath变量:从菜单条,选择Window>Preferences,选择jav......