Maven学习笔记:pom文件配置信息详解

本文是自己的学习笔记,主要参考以下资料

- B站,黑马程序员制作,https://www.bilibili.com/video/BV1Ah411S7ZE?p=5

  • 1、Dependency
    • 1.1、依赖冲突
    • 1.2、屏蔽依赖
    • 1.3、排除依赖
    • 1.4、依赖范围
      • 1.4.1、scope的值
  • 2、packaging标签
    • 2.1、什么是聚合管理项目
    • 2.2、聚合管理项目实例
  • 3、dependencyManagement标签
  • 4、property标签
    • 4.1、访问setting.xml中的属性
    • 4.2、访问系统中的变量
    • 4.3、资源文件访问Maven定义的变量
      • 4.3.1、maven中定义属性
      • 4.3.2、允许资源文件访问maven
      • 4.3.3、使用maven中的变量
      • 4.3.4、验证
  • 5、profiles标签
    • 5.1、配置profile
    • 5.2、指定profile
      • 5.2.1、设置默认profile
      • 5.2.2、通过命令行参数指定profile
      • 5.2.3、验证


1、Dependency

1.1、依赖冲突

如果依赖有冲突,那实际采用的版本遵循以下原则。

  1. 最短路径优先
  2. 声明优先:

1.2、屏蔽依赖

如果项目A引入了一个依赖a,其他项目依赖项目A时会自动引入依赖a,如果我们不希望其他项目因为项目A引入依赖a时,我们可以在项目A引入依赖a时进行配置optional选项,令值为true即可。

比如Project2引入了Project1,而Project1引入了log4j依赖。我们可以看到Project2也引入了log4j
Maven学习笔记:pom文件配置信息详解_第1张图片

这是我们在Project1的pom文件中设置,令optional=1

<dependency>
    <groupId>log4jgroupId>
    <artifactId>log4jartifactId>
    <version>1.2.17version>
    <optional>trueoptional>
dependency>

刷新一下Maven,就可以看到Proejct2不再引入log4j依赖了。
Maven学习笔记:pom文件配置信息详解_第2张图片

1.3、排除依赖

想要Project2不间接依赖log4j的话,也可以主动在Project2的Pom文件中配置。使用。这样也可以达到目的。

<dependency>
    <groupId>com.mavenlearning.project1groupId>
    <artifactId>Project1artifactId>
    <version>1.0.0version>
    <exclusions>
        <exclusion>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
        exclusion>
    exclusions>
dependency>



1.4、依赖范围

依赖范围是指导入的依赖可以在项目中的哪些阶段或者位置使用,使用来定义。比如引入一个依赖junitscope=test,那junit这个依赖包只能在test方法中使用。

1.4.1、scope的值

scope 主程序 测试代码 打包 范例
compile(默认) Y Y Y log4j
test Y junit
provided Y Y servlet-api
runtime Y jdbc

其中, 打包范围是指packaging指令的范围。




2、packaging标签

标签同级它的作用是指明项目的打包方式,一般来说有三种打包方式,分别是jarwarpomjarwar就代表打包成jar包和war包。下面就详细讲一下pom是什么。

2.1、什么是聚合管理项目

聚合管理项目就是在Maven层面统一管理一组有依赖关系的项目。

比如现在现在有三个项目,Project2依赖Project1,Project3依赖Project2。

依赖
依赖
Project3
Project2
Project1

Maven学习笔记:pom文件配置信息详解_第3张图片
这三个项目有依赖关系,在开发中如果有更新,那三个项目就应该同时更新,那我们就要在三个项目中分别进行install操作。这实在有点麻烦。这时候我们就可以利用标签,对着三个项目聚合管理,一次install就能将三个项目都更新到仓库。


2.2、聚合管理项目实例

我们可以建立一个新项目,就叫Project,这个项目是个空项目,我把src下的文件都删了,只留一个pom.xml文件。
Maven学习笔记:pom文件配置信息详解_第4张图片
建立这个项目的目的是为了聚合管理剩下的三个项目。

在Project的pom.xml文件中将的值设为pom。表示这个项目是个空的项目。

之后加上标签,表示聚合管理这些项目,以后对Project进行的maven操作都会一起作用到中定义的项目
Maven学习笔记:pom文件配置信息详解_第5张图片
现在我们对Project项目进行install操作,日志如下。
Maven学习笔记:pom文件配置信息详解_第6张图片
可以看到Project1,2,3都被一起install了。



3、dependencyManagement标签

类似的,他们的子标签都是。不同的是,是定义项目的依赖,定义好之后,项目会去加载对应的依赖。而中是存放依赖的定义。等到需要用到依赖的时候就在指定即可。

比如下面就没有指定spring-contexg的版本,但是项目是知道要去使用5.3.15的。

<dependencies>
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
    dependency>
dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>5.3.15version>
        dependency>
    dependencies>
dependencyManagement>

通常来说,这个标签是用来统一管理依赖,一般在父项目中定义依赖,子项目就使用父项目中的依赖,不会导致版本号不一致的情况。




4、property标签

顾名思义就是定义属性的标签。

<properties>
	<spring.version>1.0.0spring.version>
properties>

上面就定义了一个属性,如果想要使用它就用${spring.version}就可。

<dependency>
     <groupId>org.springframeworkgroupId>
     <artifactId>spring-contextartifactId>
     <version>${spring.version}version>
 dependency>
 

4.1、访问setting.xml中的属性

我们可直接使用setting.xml中的属性,一般用于动态配置,他们都是以settings开头。

比如${settings.localRepository}


4.2、访问系统中的变量

凡是在Java程序中用System.getProperty()方法能得到的变量,都可以在maven中直接使用。

比如${user.home}

同时,我们也可以使用maven的命令来查询哪些系统变量可使用。使用mvn help:system即可查询
Maven学习笔记:pom文件配置信息详解_第7张图片

4.3、资源文件访问Maven定义的变量

资源文件一个是指resourse下的文件。
Maven学习笔记:pom文件配置信息详解_第8张图片
我们在maven中定义一个变量jdbc:mysql/localhost:3306/maven,jdbc.properties也能访问到这个变量。


4.3.1、maven中定义属性

首先是maven中属性的定义

<properties>
    <jdbc.url>jdbc:mysql/localhost:3306/mavenjdbc.url>
properties>


4.3.2、允许资源文件访问maven

定义好之后,还需要加上一些配置,表示允许资源文件访问maven中的变量。

指定资源文件所在目录,并且令true

<build>
    <resources>
        <resource>
            <directory>{project.baseurl}/src/main/resourcesdirectory>
            <filtering>truefiltering>
        resource>
    resources>
build>


4.3.3、使用maven中的变量

之后再jdbc.properties````中用${}```使用变量即可。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.user=root
jdbc.password=123456

4.3.4、验证

之后我们对项目进行package操作,然后查看target中编译的配置文件。可以看到jdbc.properties成功使用了maven中定义的变量

Maven学习笔记:pom文件配置信息详解_第9张图片



5、profiles标签

5.1、配置profile

就是用来多环境配置的,有些属性值或者其他的配置会根据环境变化,这里就需要用到这个标签。

比如上面的标签,假设生产环境端口号是3306,开发环境是3307,那我们就可以进行下面的配置。

<profiles>
    <profile>
        <id>proid>
        <properties>
            <jdbc.url>jdbc:mysql/localhost:3306/mavenjdbc.url>
        properties>
    profile>
    <profile>
        <id>devid>
        <properties>
            <jdbc.url>jdbc:mysql/localhost:3307/mavenjdbc.url>
        properties>
    profile>
profiles>

很明显id就是唯一表示一个profile。然后我们不仅可以配置,还可以配置其他的比如


5.2、指定profile

如果我们没有设置默认profile的话,同时指定profile,那Maven完全不会去使用任何一个profile定义的内容。

5.2.1、设置默认profile

我们可以通过来指定默认profile

<activation>
    <activeByDefault>trueactiveByDefault>
activation>

比如我们指定pro为默认profile

<profiles>
    <profile>
        <id>proid>
       	<activation>
	    	<activeByDefault>trueactiveByDefault>
		activation>
        <properties>
            <jdbc.url>jdbc:mysql/localhost:3306/mavenjdbc.url>
        properties>
    profile>
    <profile>
        <id>devid>
        <properties>
            <jdbc.url>jdbc:mysql/localhost:3307/mavenjdbc.url>
        properties>
    profile>
profiles>


5.2.2、通过命令行参数指定profile

我们可以通过命令行指定profile。

参数是在指定后面加上-P profileId。比如指定profile为dev

mvn package -P dev

在idea中配置也有同样的效果
Maven学习笔记:pom文件配置信息详解_第10张图片


5.2.3、验证

同properties中介绍的那样,我们看看编译后的jdbc.properties文件的值的变化就能知道指定profile是否成功。

第一次是用pro,第二次用dev,结果显示指定成功

mvn package -P pro
mvn package -P dev

Maven学习笔记:pom文件配置信息详解_第11张图片Maven学习笔记:pom文件配置信息详解_第12张图片

你可能感兴趣的:(maven,maven,学习)