一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。maven为了支持构建的灵活性,内置了三大特性,即:属性、profile和资源过滤

1、maven属性

maven属性分6类:

    1、内置属性:如${basedir}表示项目根目录,${version}表示项目版本

    2、POM属性:用户可以引用pom文件中对应的值。如:

         ${basedir} 项目根目录

         ${project.build.directory} 构建目录,缺省为target

         ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes

         ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}

         ${project.packaging} 打包类型,缺省为jar

         ${project.xxx} 当前pom文件的任意节点的内容 

    3、自定义属性:用户可以在pom的<properties>元素下自定义maven属性。

    4、setting属性:用户可以使用以settings开头的属性引用settings.xml中xml元素的值,如${settings.localRepository}指向用户本地仓库的地址。

    5、java系统属性:maven可以使用当前java系统的属性,如${user.home}指向了用户目录。

    6、环境变量属性:所有环境变量都可以使用以env.开头的属性。如:${env.JAVA_HOE}。

2、资源过滤

这里所谓的资源:也就就是指src/main/resources和src/test/resources文件下的所有文件,默认情况下,这些文件会被复制到classpath下面,即target/classes下面。

     所谓资源过滤,就是过滤这些文件夹下面的文件里面的内容,看里面的maven变量是否需要替换。默认情况下,只有pom.xml里面的变量才会被替换,资源文件是不会被过滤的,但是可以设置,如下:

  1. <build>
  2. <finalName>agentmanager</finalName>
  3. <sourceDirectory>src/main/java</sourceDirectory>
  4. <resources>
  5. <!-- 控制资源文件的拷贝 -->
  6. <resource>
  7. <directory>src/main/resources</directory>
  8. <excludes>
  9. <exclude>**/jre.zip</exclude>
  10. <exclude>**/jre.tar</exclude>
  11. <exclude>agentmanager.jsmooth</exclude>
  12. <exclude>assembly.xml</exclude>
  13. </excludes>
  14. <targetPath>${project.build.directory}</targetPath>
  15. </resource>
  16. <resource>
  17. <directory>src/main/resources/conf</directory>
  18. <targetPath>${basedir}/conf</targetPath>
  19. <filtering>true</filtering>
  20. </resource>
  21. </resources>
  22. </build>

如jdbc.properties

  1. jdbc.driverClassName=${db.driver}
  2. jdbc.url=${db.url}
  3. jdbc.username=${db.user}
  4. jdbc.password=${db.pwd}

profile文件

  1. <profiles>
  2. <profile>
  3. <id>dev</id>
  4. <properties>
  5. <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
  6. <db.url>jdbc:oracle:thin:@10.252.48.3:1521:dbname</db.url>
  7. <db.user>username</db.user>
  8. <db.pwd>userpwd</db.pwd>
  9. </properties>
  10. </profile>
  11. <profile>
  12. <id>test</id>
  13. <properties>
  14. <db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
  15. <db.url>jdbc:oracle:thin:@10.252.48.3:1521:testdbname</db.url>
  16. <db.user>testusername</db.user>
  17. <db.pwd>testuserpwd</db.pwd>
  18. </properties>
  19. </profile>
  20. </profiles>

在构建时可以使用-P参数激活一个或多个profile,多个之间用逗号分隔

如 mvn clean install -Pdev

3、maven profile

上面例子应该可以看出profile是做什么的,其实就相当于定义了一系列的profile变量,在具体构建时可用使用其中的某个profile去变量替换资源文件。

      激活profile的方式有很多,如命令行激活(上面),settings文件显式激活、系统属性激活、操作系统环境激活、默认激活、文件存在与否激活等,具体可以参考官网资料

3.1 profile的种类

根据需要,可以在以下文件声明profile。

      1、pom.xml 针对当前项目

      2、用户 settings.xml 用户目录下的.m2/settings.xml, 对当前用户的所有项目有效。

      3、全局 settings.xml 即maven安装目录下的conf/settings.xml。对本机上的所有项目有效。

4、web资源过滤

在maven的web项目里面,除了上面所说的资源文件(src/main/resources)之外,还有一类叫做web资源目录,即src/main/webapp下面的js、css等等。默认情况下,这些目录是不被资源过滤的,开启的命令如下:

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-war-plugin</artifactId>
  4. <version>2.1.1</version>
  5. <configuration>
  6. <webResources>
  7. <resource>
  8. <directory>src/main/webapp</directory>
  9. <filtering>true</filtering>
  10. <includes>
  11. <include>**/*.css</include>
  12. <include>**/*.js</include>
  13. </includes>
  14. </resource>
  15. </webResources>
  16. </configuration>
  17. </plugin>

Maven学习总结(17)——深入理解maven灵活的构建的更多相关文章

  1. 深入理解maven与应用(二):灵活的构建

    深入理解maven及应用(一):生命周期和插件 參考官方url:http://maven.apache.org/guides/index.html 一个优秀的构建系统必须足够灵活,应该可以让项目在不同 ...

  2. Maven学习总结(4)——Maven核心概念

    Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...

  3. Maven学习总结(14)——Maven 多模块项目如何分工?

    一.开场白 使用Maven有段时间了,只能感慨真是个好东西,让我从传统模式体会到了严谨.规范.敏捷.方便的特性. 如果你懂Maven或许看过Juven翻译的<Maven权威指南>: 发个牢 ...

  4. Maven学习笔记【1】 -- Maven简介

    本文主要讲Maven的基础知识. 一 什么是Maven? Maven是一个项目管理工具.Maven提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档.最强大的功能就是能够自动下 ...

  5. Maven学习总结(2)——Maven项目构建过程练习

    Maven学习总结(二)--Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项目的过程 一.创建Maven项目 1.1.建 ...

  6. Maven学习总结(22)——Maven常用插件介绍

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  7. Maven学习笔记(1)之安装Maven

    此笔记是学习Maven时自己摸索+各种百度而来,并非全部原创,望与各位一同学习,勿拍~勿拍~ 安装步骤 1.下载Maven的最新版本,地址:http://maven.apache.org/downlo ...

  8. Maven学习(一) -- 安装Maven及Eclipse中配置Maven

    标签(空格分隔): 学习笔记 本文环境:Windows7, JDK1.7.0_76 安装及配置Maven环境变量 需要电脑中已经有Java环境 在控制台中输入:echo %JAVA_HOME%看是否能 ...

  9. Maven学习(七)-- 使用Maven构建多模块项目

    摘自:http://www.cnblogs.com/xdp-gacl/p/4242221.html 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为doma ...

  10. Maven学习(三)-- 使用Maven构建项目

    摘自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...

随机推荐

  1. SPSS提示“列表中不同意存在字符串变量”的解决方法

    今天用SPSS对一些数据进行主成分分析,SPSS 19.0进行主成分分析的方法是:分析--降维--因子分析,可是当导入一些变量的时候.就会弹出窗体说"列表中不同意存在字符串变量", ...

  2. Oracle的表空间和sqlplus

    1.  表空间的概念 曾经接触过的数据库都没有听到过表空间这个词,在前一段时间看到Oracle数据库的时候发现表空间无处不在. 所以表空间在Oracle数据库中应该是一个非经常常使用而且非常重要的概念 ...

  3. Node.js转化GBK编码 - iconv-lite

    node当使用node获取GBK编码的数据时,nodejs仅仅支持utf-8,node没有提供转换编码的原生支持,有倒是有一个模块iconv能干这个事,但须要本地方法,VC++库的支持.国外有个大牛写 ...

  4. 55.npm install 报错 :stack Error: Can't find Python executable "python"

    转自:https://www.cnblogs.com/zengry/p/8044379.html 解决方法 : 1. 安装python , 设置环境变量 :cmd --> path='%path ...

  5. vuejs模板中使用html代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. storm1.1运行时问题

    java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/cache/CacheBuilder 程序并没有 ...

  7. terminfo 数据库?

    什么是 terminfo 数据库? UNIX 系统上的 terminfo 数据库用于定义终端和打印机的属性及功能,包括各设备(例如,终端和打印机)的行数和列数以及要发送至该设备的文本的属性.UNIX ...

  8. 3/16 Django框架 环境搭建

    3/16 Django框架 环境搭建 环境搭建 Python解释器 Python代码通过Python解释器去执行. 编程语言 机器语言---汇编语言(助记符)---高级语言 解释型语言:解释器将代码一 ...

  9. 00084_Map接口

    1.Map接口概述 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同. (1)Collection中的集合,元素是孤立存在的(理解为单身),向集 ...

  10. 洛谷——P1137 旅行计划

    https://www.luogu.org/problem/show?pid=1137 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出 ...