SpringCloud-6-pom文件中常用的标签

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 SpringCloud-6-pom文件中常用的标签,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

4.7 pom文件中常用的标签

  • packaging:指定maven打包的方式
  • pom:管理maven项目的,内部无源码,配置在父项目中,在子项目继承或聚合maven模块
  • war:将项目打成war包,对于web项目来说,通常会设置为war
  • jar:普通java项目,通常会设置为jar
  • dependency:配置jar包的gav坐标,这样maven就可以自动下载相关jar包了

  • scope:在dependency标签下有一个scope标签,该标签的作用是可以设置依赖在项目的使用阶段,通常来说,项目包含:编译、运行、测试、打包这些不同的阶段。

  • compile:是默认值,适用于所有阶段,编译、运行、测试、打包都会包含到项目中
  • test:只在测试时使用,用于编译和运行测试代码,不会随项目发布, 例如junit,如果不修改junit依赖中的scope,我们只能在test目录下使用junit相关类。
  • runtime:只在运行时使用,例如mysql的JDBC驱动依赖,我们在编写代码的时候使用java.sql包下的类即可,在运行的时候才会用到该依赖,适用运行和测试阶段。
  • provided:编译、运行阶段使用,打包时不会包含该依赖,例如servlet.jar,这个包在tomcat容器中已经提供了,因此打包时servlet.jar 无需包含在项目中
  • system:类似provided,需要显式提供包含依赖的jar的路径(使用systemPath标签),Maven不会在仓库中查找它。使用较少
  • optional:在dependency标签下有一个optional标签,若将A的POM文件中某个依赖optional设置为true,则标识项目A的POM文件有如下依赖声明,optional表示该依赖只影响项目A, 如果有项目B依赖了A,则这两个依赖不会被传递;因此如果B依赖了A,并且只用到了spring-cloud-context,则需在B的POM中显示声明依赖spring-cloud-context即可

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-context</artifactId>
      <version>3.1.3</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    
  • systemPath:在dependency标签下有一个systemPath标签,引入非本地仓库中的jar包,有时候我们需要使用一些jar包,但是这些jar在maven仓库中并不存在,此时可以使使用下面方式引用,以log4j为例

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.18</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/log4j-1.2.17.jar</systemPath>
 </dependency>

存在问题?如此引入非本地参考的jar包时,在使用maven打包时是不会将该jar打包入项目中的【Maven打包不会将这个非本地仓库的jar包打进去】,所以还需要添加过滤方式:

<build>
        <resources>
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <targetPath>BOOT-INF/classes/</targetPath>
            </resource>
        </resources>
</build>
  • properties:对于同一个技术需要编写很多个依赖引入相关的jar包,每个依赖中都要填写版本号,倘若更换版本号的话,修改的地方比较多,所以可以使用properties统一管理版本号,logback-version可以自由命名,通过${}方式进行引用:
 	<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
  • 内置属性:
  • ${basedir} 表示项目根目录,即包含pom.xml文件的目录

  • ${version} 等同于 ${project.version} 或者 ${pom.version} 表示项目版本

  • type:在dependency标签下有一个type标签,表示引用依赖的类型,默认为jar即引入一个特定的jar包。
  • type为pom表示当我们需要引入很多jar包的时候会导致pom.xml过大,我们可以想到的一种解决方案是定义一个父项目,但是父项目只有一个,也有可能导致父项目的pom.xml文件过大。这个时候我们引进来一个type为pom,意味着我们可以将所有的jar包打包成一个pom,然后我们依赖了pom,即可以下载下来所有依赖的jar包
  • 父pom.xml管理了版本:
<!--排除zookeeper自己的日志-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • 子pom.xml引用:
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <type>pom</type>
</dependency>
  • 父pom.xml管理定义了是pom类型,子pom.xml不写pom项目中就不能正常使用相关类。
  • dependencyManagement 组件,依赖管理

作用:用来申明依赖,但不导入。dependencies 组件用于导入依赖,注意两者区别特性:

  • 子项目不会继承 dependencyManagement 组件中声明的依赖。
  • 但如果子项目想导入某个父pom 中 dependencyManagement 中的依赖,只需要填写 groupId 和 artifactId ,不需要填写版本号,maven会自动去父pom 的 dependencyManagement 中找对应的 version,包括scope、exclusions等
<dependencyManagement>
        <dependencies>
            <!--在主工程中使用 dependencyManagement 声明 Spring Cloud 的版本,
            这样工程内的 Module 中引入 Spring Cloud 组件依赖时,就不必在声明组件的版本信息
            保证 Spring Cloud 各个组件一致性-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • import的作用:有此标签则子项目中所有不声明版本的依赖均可导入,无此标签子项目中所有不声明版本的依赖则会报版本不能为空错误。所以该标签导入依赖范围,该依赖范围只能与 dependencyManagement 元素配合使用,其功能是将目标 spring-cloud-dependencies项目的pom.xml 文件中 dependencyManagement 的配置导入合并到当前 pom.xml 的 dependencyManagement 中。
  • import 说明继承了dependencyManagement中所有的依赖,从而导致当前pom能够导入不写版本的依赖。

下一篇:SpringCloud-7-Spring Boot使用Jetty容器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123822.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!