一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。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. Markdown编辑器为什么好用以及好用的markdown编辑器

    Markdown编辑器为什么好用以及好用的markdown编辑器 一.总结 一句话总结:Markdown 是一种简单的.轻量级的标记语法.用户可以使用诸如 * # 等简单的标记符号以最小的输入代价生成 ...

  2. es7 --- 新特性

    ES7只有2个特性: includes() 指数操作符 不使用ES7 使用indexOf()验证数组中是否存在某个元素,这时需要根据返回值是否为-1来判断: let arr = ['react', ' ...

  3. OpenCV —— 摄像机模型与标定

    这种理论看的已经够多了,感觉应用价值不大(矫正畸变图像还凑合,用摄像机测距神马的...) 有始有终吧,简单把内容梳理一下 针孔  摄像机模型 —— 过于理想(不能为快速曝光收集足够的光线) 透镜可以聚 ...

  4. Vue中独立组件之间数据交互

    独立组件之间数据交互:通过自定义事件 组件A中的[数据],传递给组件B 1.创建组件A,组件B 2.组件B在实例创建完成时就开始监听事件[等待接收数据]:钩子 3.组件A中触发事件,发送数据 注意:接 ...

  5. js简易留言板

      <!DOCTYPE html>   <html lang="en">   <head>   <meta charset="U ...

  6. JavaScript学习总结(11)——JS常用函数(二)

    37. getElementsByClassName ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getElementsByClassName( ...

  7. Mblog 部署手册

    准备工作 安装 JDK8 安装图片处理工具:GraphicsMagick1.3.20,下载地址 安装 Maven 准备 IDE (如果你不看源码,可以忽略下面的步骤,直接通过Maven编译war包) ...

  8. Android模拟、实现、触发系统按键事件的方法

     Android模拟.实现.触发系统按键事件的方法 /** * 模拟系统按键. * * @param keyCode */ public static void onKeyEvent(final ...

  9. 用for和while循环求e的值[e=1+1/1!+1/2!+1/3!+1/4!+1/5!+...+1/n!]

    /*编敲代码,依据下面公式求e的值. 要求用两种方法计算: 1)for循环.计算前50项 2)while循环,直至最后一项的值小于10-4 e=1+1/1!+1/2!+1/3!+1/4!+1/5!+. ...

  10. WINDOWS8.1企业版官方下载

    这是评估版 WINDOWS8.1企业版官方下载源 https://www.itechtics.com/download-windows-8-1-enterprise-offline-installer ...