一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。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. 改动UINavigationBar (导航栏)上NavigationBarItem 的字体大小和颜色的用法

    //创建一个左边button UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"<" ...

  2. JAVA多态学习2

    好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的样例一起探讨(事实上本次代码也有加上,放心). 我们这里希望从向下转型会出现的两种基本情况进行探讨 package downcasti ...

  3. CI框架源代码阅读笔记6 扩展钩子 Hook.php

    CI框架同意你在不改动系统核心代码的基础上加入或者更改系统的核心功能(如重写缓存.输出等). 比如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...

  4. SpringBoot与Dubbo的整合-zookeeper和监控中心搭建

    对于Dubbo的应用已经是十分普遍,自从阿里巴巴开源以来,国内许多公司就采用了dubbo的架构来开发项目.不过再dubbo十分火的时候,突然就停止更新了, 只有当当网还在其基础进行了拓展(dubbox ...

  5. Zabbix快速入门

    模板的管理与使用 一 模板 模板是zabbix的核心,因为模板继承了所有要监控的内容,以及所要展示的图形等等,zabbix的安装部署完成之后,自带了很多模板(网络设备模板,操作系统模板,常用应用软件模 ...

  6. 图片压缩优化kraken

    https://kraken.io/web-interface 测试过,可以节省10%左右的大小,图片清晰度不受影响.

  7. 分享一段css代码学到的js知识

    [].forEach.call($$('*'),function(val){ val.style.outline = '1px solid #'+(~~(Math.random()*(1<< ...

  8. LuoguP2756 飞行员配对方案问题(最大流)

    题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...

  9. 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model

    上篇说到,把小米的Java代码整理成了5个包,其中1个是net.micode.fileexplorer.model.这个包就2个模型类,最基本了,FileInfo和FavoriteItem. pack ...

  10. C++中的纯虚函数

    ---恢复内容开始--- 在C++中的一种函数申明被称之为:纯虚函数(pure virtual function).它的申明格式如下 class CShape { public: ; }; 在什么情况 ...