深入理解maven与应用(二):灵活的构建
參考官方url:http://maven.apache.org/guides/index.html
一个优秀的构建系统必须足够灵活,应该可以让项目在不同的环境下都能成功构建。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里面的变量才会被替换,资源文件是不会被过滤的,可是能够设置,例如以下:
<build>
<finalName>agentmanager</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<!-- 控制资源文件的拷贝 -->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/jre.zip</exclude>
<exclude>**/jre.tar</exclude>
<exclude>agentmanager.jsmooth</exclude>
<exclude>assembly.xml</exclude>
</excludes>
<targetPath>${project.build.directory}</targetPath>
</resource>
<resource>
<directory>src/main/resources/conf</directory>
<targetPath>${basedir}/conf</targetPath>
<filtering>true</filtering>
</resource>
</resources>
</build>
如jdbc.properties
jdbc.driverClassName=${db.driver}
jdbc.url=${db.url}
jdbc.username=${db.user}
jdbc.password=${db.pwd}
profile文件
<profiles>
<profile>
<id>dev</id>
<properties>
<db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
<db.url>jdbc:oracle:thin:@10.252.48.3:1521:dbname</db.url>
<db.user>username</db.user>
<db.pwd>userpwd</db.pwd>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
<db.url>jdbc:oracle:thin:@10.252.48.3:1521:testdbname</db.url>
<db.user>testusername</db.user>
<db.pwd>testuserpwd</db.pwd>
</properties>
</profile>
</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等等。默认情况下,这些文件夹是不被资源过滤的,开启的命令例如以下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
<includes>
<include>**/*.css</include>
<include>**/*.js</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
<includes>
<include>**/*.css</include>
<include>**/*.js</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
深入理解maven与应用(二):灵活的构建的更多相关文章
- 深入理解maven及应用--转
(一):生命周期和插件 在项目里用了快一年的maven了,最近突然发现maven项目在eclipse中build时非常慢,因为经常用clean install命令来build项目,也没有管那么多,但最 ...
- 【转】Maven实战(二)---多模块开发---缺少Jar包
原博文出于:http://blog.csdn.net/liutengteng130/article/details/41611755 感谢! Maven里面的Jar包经常出现Missing的情况 ...
- 11 Maven 灵活的构建
Maven 灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时 ...
- Maven系列(二)exec-maven-plugin
Maven系列(二)exec-maven-plugin 1. mvn 命令行运行 # exec:java 不会自动编译代码,你需要手动执行 mvn compile 来完成编译 mvn compile ...
- Maven入门系列(二)--设置中央仓库的方法
原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...
- Maven学习系列二(1-5)
Maven学习系列二(1-5) 本文转自 QuantSeven 博客,讲解精炼易懂,适合入门,链接及截图如下 http://www.cnblogs.com/quanyongan/category/47 ...
- 深入理解C指针之二:C内存管理
原文:深入理解C指针之二:C内存管理 内存管理对所有程序来说都很重要.有时候内存由运行时系统隐式的管理,比如为变量自动分配内存.在这种情况下,变量分配在它所处的函数的栈帧上(每个函数都有它自己的栈帧, ...
- Spring Boot Maven Plugin(二):run目标
简介 Spring Boot Maven Plugin插件提供spring boot在maven中的支持.允许你打包可运行的jar包或war包. 插件提供了几个maven目标和Spring Boot ...
- 深入理解Spring AOP之二代理对象生成
深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...
随机推荐
- hibernate 缓存 4.3
缓存在hibernate中是天生就有的,是一级缓存,当session关闭时一级缓存就失效了 一级缓存是内置的,生效范围是在同一个session中才行.二级缓存是需要配置才有 判断当前项在不在一级缓存中 ...
- android 破解九宫格
将目录切换到D:/adb目录下,命令如下 敲入命令 adb shell 然后回车,可以见到如下结果 再敲入命令cd /data/system然后回车, 再执行 rm gesture.key 回车,搞定 ...
- GDKOI2016
天若有情天亦老 月若无恨月常圆 Day1 score cardcaptor AAAAAAAATT protal WWWWWWWWWW treasurehunt AAAAWXXXXX map AAATT ...
- 解析LayoutSubviews
layoutSubviews作用 layoutSubviews是对subviews重新布局.比如,我们想更新子视图的位置的时候,可以通过调用layoutSubviews方法,既可以实现对子视图重新布局 ...
- UVA 10652 Board Wrapping(凸包)
The small sawmill in Mission, British Columbia, hasdeveloped a brand new way of packaging boards for ...
- gpg-agent具体配置
gpg(gnupg)工具使用很广泛,在前面一篇文章中就具体介绍:http://blog.csdn.net/dongtingzhizi/article/details/26362205,有一个问题值得关 ...
- android -- 蓝牙 bluetooth (三)搜索蓝牙
接上篇打开蓝牙继续,来一起看下蓝牙搜索的流程,触发蓝牙搜索的条件形式上有两种,一是在蓝牙设置界面开启蓝牙会直接开始搜索,另一个是先打开蓝牙开关在进入蓝牙设置界面也会触发搜索,也可能还有其它触发方式,但 ...
- 【JavaScript】==与===对比
1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进 ...
- BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
做一次MST, 枚举不在最小生成树上的每一条边(u,v), 然后加上这条边, 删掉(u,v)上的最大边(或严格次大边), 更新答案. 树链剖分然后ST维护最大值和严格次大值..倍增也是可以的... - ...
- XCode 快速注释插件
下载VVDocumenter-Xcode这个插件 打开编译后,重启Xcode 输入///,如效果图,Window->VVDocumenter自己定制风格