maven pom文件中常用的标签

通过pom文件可以对maven进行设置,其中有一些常用的标签我们来一起看一下

packaging

下面的groupId,artifactId,version之前有说过了,这里就不再解释了,其中有个packaging标签,该标签的作用是指定maven打包的方式,有三个选项:

  • pom

    该方式主要是管理maven项目的,里面不放源码,用于继承或聚合的maven模块中

  • war

    会将项目打成war包,对于web项目来说,通常会设置为war

  • jar

    打成jar包,对于普通java项目来说,通常会设置为jar

      <groupId>com.monkey1024</groupId>
      <artifactId>19mavenweb</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    

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不会在仓库中查找它。使用较少

systemPath

引入非本地仓库中的jar包,有时候我们需要使用一些jar包,但是这些jar在maven仓库中并不存在,此时可以使使用下面方式引用,以log4j为例:

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

如果这样引入非本地参考的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>
    <logback-version>1.2.3</logback-version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>${logback-version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback-version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-access</artifactId>
      <version>${logback-version}</version>
    </dependency>