maven的基本使用

1、maven的基本介绍

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

maven 可以管理 jar 文件,能自动下载 jar 和它的文档、源代码,能管理 jar 之间的依赖。Maven 能够帮助开发者完成以下工作:构建、文档生成、报告、依赖、SCMs、发布、分发、邮件列表。

 

为什么需要maven?:由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring,SpringMVC、MyBatis、数据库驱动,等等,都是以 jar 包的形式出现的,jar 包之间会有关联,在使用一个依赖之前,还需要确定这个依赖所依赖的其他依赖,所以,当项目比较大的时候,依赖管理会变得非常麻烦臃肿,这是 Maven 解决的第一个问题。

Maven 还可以处理多模块项目。简单的项目,单模块分包处理即可,如果项目比较复杂,要做成多模块项目,例如一个电商项目有订单模块、会员模块、商品模块、支付模块…,一般来说,多模块项目,每一个模块无法独立运行,要多个模块合在一起,项目才可以运行,这个时候,借助 Maven 工具,可以实现项目的一键打包。

 

2、安装配置maven

2.1、下载安装maven

Maven 是 Java 项目,因此必须先安装 JDK,JDK 安装配置可参考:https://www.cnblogs.com/wenxuehai/p/9492355.html

然后下载 maven,maven 的下载地址:http://maven.apache.org/download.cgi。下载路径如下图:

新版本可能会有一些问题,我们推荐使用 3.3.9 版本,历史版本下载可参考:https://blog.csdn.net/timexx/article/details/107827497

官网下载可能比较慢,提供一个 3.3.9 版本下载链接:链接:https://pan.baidu.com/s/1dLUrGfmdQq6UpVwze2Xmyg    提取码:dhrj

 

安装 maven 直接将下载的压缩包解压即可,解压下载文件后可看到目录如下:

 

2.2、配置maven环境变量

然后需要配置环境变量,配置环境变量跟 JDK 类似。

  1. 先在系统变量当中添加一个环境变量 MAVEN_HOME,变量值为 maven 的安装目录的根目录,比如:E:\develop\apache-maven-3.3.9
  2. 然后找到系统变量 Path,给该变量的值后面添加:;%MAVEN_HOME%\bin   即可

可参考:https://www.runoob.com/maven/maven-setup.html

 

检验 maven 安装是否成功,直接在命令窗口输入 mvn -v ,如果有输出 maven 的版本说明安装成功:

 

3、maven约定的目录结构

Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。一个使用Maven管理的普通的Java项目,它的目录结构默认如下:

 MavenProject
        |-- pom.xml   maven项目的配置文件。对项目中的所有jar包依赖进行统一管理
        |-- src
            |-- main
                 | -- java  存放项目源代码
                 | -- resources(可省略)  存放项目配置文件 .xml等 

            |-- test(可省略)
                 | -- java  存放单元测试源代码
                 | -- resources   存放单元测试资源文件 .xml等

        |-- target(由maven生成)  存放所有编译、打包生成的文件
            |-- classes  存放项目源代码编译输出的字节码文件
            |-- test-classes  存放测试代码编译输出的字节码文件

默认情况下,项目在编译过后,会将 src/main/java 编译过后的字节码文件和 src/main/resource 中的文件放在 target/classes 目录下。但是,src/main/java 目录下的非包且非java的文件在编译过后并不会自动被拷贝在 target/classes 目录下,而是会丢失。如果我们想要将 src/main/java 目录下的非包且非java的文件也一并拷贝在 target/classes 目录下,则需要在 pom.xml 文件的 build 标签下进行配置。

 

4、maven仓库配置

Maven 仓库是项目中依赖的第三方库。在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

Maven 仓库有以下几种类型:

  • 本地仓库(local)
  • 中央仓库
  • 私服仓库

除本地仓库以外的仓库都可以叫做远程仓库。

当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。这 3 个仓库中,jar 包的查找顺序如下:

 

4.1、本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。默认位置:当前用户名\.m2\repository。

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

本地仓库默认位置在 当前用户名\.m2\repository,我们也可以修改本地仓库的位置。在 maven 安装目录下的 conf/settings.xml 文件中可以修改,在该配置文件中可以看到 localRepository 节点被注释掉了,我们可以直接复制该节点,将值修改为本地路径即可,如下:

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
  <localRepository>E:/develop/maven_repository</localRepository>

当你运行 Maven 命令,Maven 会将下载依赖的文件放到你指定的路径中。

 

4.2、中央仓库

中央仓库属于远程仓库的一种,Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等,一般来说,简单的Java项目依赖的包都可以在这里下载到。

中央仓库需要通过网络才能访问。低版本的 maven 中,比如 maven-2.0.10,可以在 ${M2_HOME}/lib/maven-2.0.10-uber.jar  中找到 pom.xml 配置文件。但是在 3.xxx 版本及之后的版本,在 maven 安装目录下的 lib/maven-model-builder-${version}.jar 下,可以在 \org\apache\maven\model\pom-4.0.0.xml 取到 pom-4.0.0.xml 配置文件,该配置文件是所有 Maven POM 的父 POM,所有Maven项目继承该配置。

你可以在 pom-4.0.0.xml 配置文件中找到如下配置信息:

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
</repositories>

可以看到,中央仓库的id为central,远程url地址为 https://repo.maven.apache.org/maven2,它关闭了snapshot版本构件下载的支持。

 

4.3、私服仓库

私服也属于远程仓库的一种,一般来说,私服仓库搭建在公司局域网内,专供公司内部开发人员提供服务,不是对外使用的。

本地仓库(本机)--->私服(局域网)--->中心仓库(外部网络)

 

4.4、配置中央仓库

默认的中央仓库地址为 https://repo.maven.apache.org/maven2,但是国外的远程库下载速度比较慢,甚至可能会出现无法访问的问题,此时我们可以配置国内的仓库,比如阿里云中央仓库等。

 

4.4.1、在项目的 pom.xml 文件中配置中央仓库

配置我们自己的远程仓库有很多好处,比如你有一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的一个 jar 在 central 中找不到,它只存在于某个特定的公共仓库,这样你也不得不添加那个远程仓库的配置。

我们可以在项目的 pom.xml 文件中配置远程仓库。比如下面配置远程仓库指向阿里云仓库:

<?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>

  <repositories>
    <repository>
      <id>maven-ali</id>
      <url>http://maven.aliyun.com/nexus/content/repositories/central</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
    </repository>
  </repositories>

  <groupId>org.example</groupId>
  <artifactId>springmvc_maven_test01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

   ...
</project>

<repositories>下面可以添加多个<repository> ,每个<repository>都有它唯一的ID,一个描述性的name,以及最重要的远程仓库的url。<releases><enabled>true</enabled></releases> 告诉Maven可以从这个仓库下载 releases 版本的构件,而<snapshots><enabled>false</enabled></snapshots> 告诉Maven不要从这个仓库下载 snapshot 版本的构件,禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。

 

4.4.2、在maven安装目录下的settings.xml文件配置

在项目的 pom.xml 文件中可以配置中央仓库,但是这样每个项目都需要配置一遍,需要重复工作。我们可以直接在 maven 安装目录下的 conf/settings.xml 文件中配置中央仓库。

找到 mirrors 标签,添加如下配置:

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
     <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>

可以看到 <mirrorOf> 的值是 central,意思就是用以上镜像替代 Maven 自带的中央仓库。

 

5、maven项目配置文件pom.xml

maven 安装目录下的 setting.xml 主要用于配置 maven 的运行环境等一系列通用的属性,是全局级别的配置文件。而 pom.xml 主要描述了项目的基本信息,用于描述项目如何构建,声明项目依赖等等,是项目级别的配置文件。执行任务或目标时,Maven 会在当前目录中查找 POM,然后读取 POM,获取所需的配置信息,然后执行目标。

pom(project object model)即项目对象模型,maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述。

一个基本的pom.xml文件配置如下:

<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">
 
    <!-- maven模型的版本,对于maven2和maven3来说,只能是4.0.0 -->
    <modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,一般是公司域名的倒写,或者是公司域名倒写+项目名。并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group --> <groupId>com.companyname.project-group</groupId> <!-- 项目的唯一ID,一个groupId下面可以有多个项目,通过artifactId来区分 --> <artifactId>project</artifactId> <!-- 项目的版本号 --> <version>1.0.0</version> </project>

所有 POM 文件都需要 <project> 标签元素和该标签下的三个必需字段:groupId,artifactId,version。 

groupId + artifactId + version = 坐标,坐标可用于标识互联网中的唯一资源。在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。

 

5.1、pom.xml配置文件常见标签

pom.xml 配置文件的常见标签:

  • <package>:项目打包的类型,例如jar、war、ear、pom等
  • <dependencies>:项目相关的所有依赖
  • <properties>:定义一些常量
  • <build>:设置 maven 在进行项目的构建时的配置

 使用示例如下:

<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">
 
    <groupId>com.companyname.project-group</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0</version>

    <!--项目打包的类型,例如jar、war、ear、pom等,默认是jar->
    <packaging>jar</packaging>

    <!--项目相关的所有依赖 -->
    <dependencies>
         <dependency>
              <groupId>xxx</groupId>
              <artifactId>xxx</artifactId>
              <version>xxx</version>
         </dependency>

         <dependency>
                ...
         </dependency>
     </dependencies>

     <!-- 在properties标签中可以自定义一些标签,以此来定义一些常量,在pom中的其它地方可以直接引用,使用方式如 :${test.uuid}。比如我们可以定义一些共用的依赖包版本号,这样版本号需要修改时只需修改这里一个地方即可 -->  
    <properties>  
        <file.encoding>UTF-8</file.encoding>  
        <test.uuid>123</test.uuid>
        <java.source.version>1.5</java.source.version>  
    </properties>  

    <build>  
         <!-- 打包生成的包的文件名,默认值是${artifactId}-${version}。 -->  
        <finalName>myPorjectName</finalName>  
  
        <!-- 构建产生的所有文件存放的目录,默认为${basedir}/target,即项目根目录下的target -->  
        <directory>${basedir}/target</directory>  
        ...
    </build>  
</project>

 

6、maven的三套生命周期

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插件完成,类似于设计模式中的模板方法。

Maven有三套相互独立的生命周期,分别是

  • clean:项目清理的处理
  • default(build):项目部署的处理
  • site:项目站点文档创建的处理

每套生命周期各自包含一些阶段(phase),这些 phase 就相当于 Maven 提供的统一的接口,然后这些 phase 的实现由 Maven 的插件来完成。阶段是有顺序的,后面的阶段依赖于前面的阶段。各个生命周期相互独立,一个生命周期的阶段前后依赖。

比如:执行 mvn clean 命令:将会调用clean生命周期的 clean 阶段,实际上会执行 pre-clean 和 clean 阶段;执行 mvn test 命令:调用 default 生命周期的 test 阶段,实际执行 test 以及之前所有阶段;执行 mvn clean install:调用 clean 生命周期的 clean 阶段和 default 的install 阶段,实际执行 pre-clean 和 clean,install 以及之前所有阶段

 

6.1、clean生命周期

clean生命周期:清理项目,包含三个阶段:

  1. pre-clean:执行清理前需要完成的工作
  2. clean:清理上一次构建生成的文件
  3. post-clean:执行清理后需要完成的工作

 

6.2、default(build)生命周期

default生命周期:构建项目,重要的 phase(阶段)如下:

  1. validate:验证工程是否正确,所有需要的资源是否可用。
  2. compile:编译项目的源代码。  
  3. test-compile:编译测试源码
  4. test:使用合适的单元测试框架来测试已编译的源代码。
  5. Package:把已编译的代码打包成可发布的格式,比如jar。
  6. integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
  7. verify:运行所有检查,验证包是否有效且达到质量标准。
  8. install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
  9. Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

 

6.3、site生命周期

site生命周期:建立和发布项目站点,phase如下

  1. pre-site:生成项目站点之前需要完成的工作
  2. site:生成项目站点文档
  3. post-site:生成项目站点之后需要完成的工作
  4. site-deploy:将项目站点发布到服务器

 

7、maven的常用命令

maven常用命令如下:

  • mvn clean:清理。该命令会删除 maven 编译生成的目录,即 target 目录,但是已经 install 到本地仓库中的包不会删除。
  • mvn compile:编译项目主代码,即 src/main 目录下的 java 程序。编译完成后会在项目根目录下生成一个 target/classes 目录,里面存放着 java 程序编译之后生成的字节码文件。并且 src/main/resource 目录下的文件都会被放到 target/classes 目录下
  • mvn test-compile:编译项目中 src/test目录下的测试代码。编译完成后会在项目根目录下生成一个 target/test-classes 目录,里面存放着测试代码编译之后生成的字节码文件。
  • mvn test:运行所有的测试代码
  • mvn package:打包。按照 pom.xml 中的配置,将项目打成 jar 包或者 war 包。 
  • mvn install:安装本项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
  • mvn deploy:部署。将最终的项目包复制到远程仓库中与其他开发者和项目共享。

在命令行 CMD 上执行以上命令,需在命令行进入 pom.xml 所在目录下即项目的根目录下才能执行。

 

7.1、maven如何将web项目打包成war包

maven 将 java web 项目打包成 war 包,首先确认一下 pom.xml 中的配置的打包类型是打包成 war 包的:

 

确认好之后,通过命令行工具切换至该 web 项目的根目录下,执行 mvn clean package 命令即可:

 

打包完成后,可以在该项目的根目录下的 target 文件夹下找到一个 war 包。将该 war 包直接放到 tomcat 的 webapps 目录下即可部署成功。

 

部署:

 

8、maven的插件

 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的,Maven 实际上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,

例如 maven- compiler-plugin 的 compile 目标用来编译位于 src/main/java/ 目录下的主源码,testCompile 目标用来编译位于 src/test/java/ 目录下的测试源码。我们在输入 mvn 命令的时候 比如 mvn clean,clean 对应的就是 Clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 插件来实现的。

 

用户可以通过两种方式调用 Maven 插件目标。第一种方式是将插件目标与生命周期阶段绑定,这样用户在命令行只是输入生命周期阶段而已,例如输入 mvn compile 命令,Maven 默认会将 maven-compiler-plugin 的 compile 目标与 compile 生命周期阶段绑定,因此命令mvn compile 实际上是先定位到 compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。

第二种方式是直接在命令行指定要执行的插件目标,例如 mvn archetype:generate 就表示调用 maven-archetype-plugin 的 generate 目标,这种带冒号的调用方式与生命周期无关。

插件配置示例:

<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">
 
    <groupId>com.companyname.project-group</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0</version>


    <build>  
        <!-- 配置插件 -->  
           <plugins>  
                 <plugin>  
                      <groupId>org.apache.maven.plugins</groupId>
                      <!-- 插件名称 -->   
                      <artifactId>maven-compiler-plugin</artifactId>
                      <version>3.8.1</version>  

                      <!-- 在这里给插件进行一些配置 -->   
                      <configuration>  
                              <source>1.6</source>    <!-- 源代码使用的JDK版本 -->     
                              <target>1.6</target>    <!-- 需要生成的目标class文件的编译版本。一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行,会存在target不同于source的情况 -->
                       </configuration>  
                  </plugin> 
            </plugins>  
    </build>  
</project>

 

9、maven的依赖管理

依赖是 maven 项目引用的资源架包,依赖范围就是这些资源 jar 包在 maven 项目中的作用范围。maven 项目通过依赖范围来控制何时引用资源架包,比如我们需要在编译阶段用到某个 jar 包,我们可以指定该 jar 包的作用范围为 compile。 

maven 的依赖范围用 scope 关键字表示,有五种依赖范围:

  • compile:依赖范围的默认值,如果maven项目中引入一个依赖,没有添加scope依赖范围,那么默认的就是compile。这表示该 maven 项目在编译、测试、打包、安装、部署阶段都需要引用该依赖。
  • test:表示该依赖包只和测试相关。
  • provided:表示maven项目只在编译和测试时引用该依赖,如果将项目打包运行时,则不会引入该依赖。如 servlet-api,这是 web 项目常用的架包,在项目编译和测试时都需要用到该架包,如果项目需要运行,则需要将项目部署到 tomcat 或其他 web 服务器上,但是 tomcat 中自带了 servlet-api,如果 maven 项目中引入了 servlet-api,那么会和 tomcat 中的 servlet-api 产生冲突,所以可以使用 provided 限定 servlet-api,让maven项目在打包时不再引入 servlet-api。

  • runtime和system:这两个是不常用的。runtime 表示在测试和部署运行阶段需要引入该依赖,在编译阶段不引入该依赖,如JDBC的驱动包,因为JDBC驱动是通过反射机制加载的,所以不参与项目编译过程。system 的作用域和 provided 类似,表示引用仓库之外的依赖,需要通过 systemPath 指定本地依赖的路径,除了特殊情况基本不使用。

  依赖范围 是否作用于编译阶段 是否作用于测试执行阶段 是否作用于部署运行阶段
1 compile(默认值)
2 test
3 provided
4 runtime
5 system

 

 

 

 

 

 

 

 比如一个 java EE 项目,有 compile 和 test 作用范围的依赖包。因为 compile 需要作用在打包部署运行阶段,所以 compile 作用范围的依赖包在打包过后会被 maven 自动放在  项目war包/WEB-INF/lib 目录下;而 test 作用范围的依赖包则不会出现在 war 包中。

 配置示例,Junit 只在测试阶段才起作用:

<?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>

  <groupId>org.example</groupId>
  <artifactId>maven_ee_01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

 

10、maven中的资源拷贝插件

默认情况下,项目在编译过后,会将 src/main/java 编译过后的字节码文件和 src/main/resource 中的文件放在 target/classes 目录下。但是,src/main/java 目录下的非包且非java的文件在编译过后并不会自动被拷贝在 target/classes 目录下,而是会丢失。如果我们想要将 src/main/java 目录下的非包且非java的文件也一并拷贝在 target/classes 目录下,则需要在 pom.xml 文件的 build 标签下进行配置。

如果我们需要将 src/main/java 目录下的资源文件也拷贝到编译后(target/classes目录对应的文件夹下)或者打包后的目录下的话,就可以使用资源拷贝插件。示例如下:

<?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>

  <groupId>org.example</groupId>
  <artifactId>maven_ee_01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <build>
    <!--resources标签需配置在<build></build>中,用来指定读取的配置文件或文件夹中的文件 -->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>

        <!--filtering是否开启替换标签,若文件中有类似${key}这样的配置,就会根据maven的配置进行覆盖,让其使用真实值来填写
true表示开启替换,false表示不开启替换,无此标签表示不开启替换
真实值是从pom中profiles的配置里面取的-->
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

 

posted @ 2021-05-04 14:03  wenxuehai  阅读(960)  评论(0编辑  收藏  举报
//右下角添加目录