Maven学习总结(17)——深入理解maven灵活的构建

转载 2016年05月31日 12:51:27
一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。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里面的变量才会被替换,资源文件是不会被过滤的,但是可以设置,如下:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  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文件

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  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等等。默认情况下,这些目录是不被资源过滤的,开启的命令如下:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  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学习(十一)----Maven深入学习(一)- 坐标

从这里开始的话,一边参照PDF文档《Maven实战》,一边整理一下自己的理解,和大家一起分享。 1.什么是Maven坐标         就像平面上的坐标一样,通过 x , y...
  • m261030956
  • m261030956
  • 2015年06月13日 12:47
  • 528

深入理解maven及应用

在项目里用了快一年的maven了,最近突然发现maven项目在eclipse中build时非常慢,因为经常用clean install命令来build项目,也没有管那么多,但最近实在受不了乌龟一样的b...
  • learner198461
  • learner198461
  • 2016年11月19日 14:46
  • 360

Maven学习总结(18)——深入理解Maven仓库

一.本地仓库(Local Repository) 本地仓库就是一个本机的目录,这个目录被用来存储我们项目的所有依赖(插件的jar包还有一些其他的文件),简单的说,当你build一个Maven项目...
  • u012562943
  • u012562943
  • 2016年04月30日 09:52
  • 1834

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

深入理解maven及应用(一):生命周期和插件 参考官方url:http://maven.apache.org/guides/index.html  一个优秀的构建系统必须足够灵活,应该能够让项目...
  • MINEZHANGHAO
  • MINEZHANGHAO
  • 2014年07月03日 14:11
  • 2578

Maven学习总结(一)—— Maven入门

一、Maven的基本概念   Maven(翻译为"专家","内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 1.1、项目构建   项目构建过程包括...
  • gongxifacai_believe
  • gongxifacai_believe
  • 2016年03月06日 20:49
  • 1064

关于Maven resource配制中include与exclude的关系

与是用来圈定和排除某一文件目录下的文件是否是工程资源的。如果与划定的范围存在冲突时,以划定的范围为准。大多数情况下,人们使用和是为了配合实现过滤特定文件的需要。例如,在一个工程中,src/main/r...
  • bluishglc
  • bluishglc
  • 2011年07月28日 14:14
  • 35999

关于Maven resource配制中include与exclude的关系

与是用来圈定和排除某一文件目录下的文件是否是工程资源的。如果与划定的范围存在冲突时,以划定的范围为准。大多数情况下,人们使用和是为了配合实现过滤特定文件的需要。例如,在一个工程中,src/main/r...
  • u014756827
  • u014756827
  • 2016年09月12日 09:46
  • 1121

JSmooth 将java代码打包成exe

JSmooth 将java代码打包成exe前言 java代码写了这么多了,但由于jdk的限制,我只能在jdk电脑上运行项目。所以最近在研究打包exe这个问题,今天终于实现了。 JSmooth下载 前期...
  • u013132051
  • u013132051
  • 2016年10月18日 15:36
  • 4848

Maven学习笔记(七)--灵活的构建

Maven属性 1. 内置属性  ${basedir} 项目根目录  ${version} 项目版本 2.POM属性:pom文件中对应元素的值 ${project.artifactId} ...
  • bayernolive
  • bayernolive
  • 2015年06月04日 10:51
  • 284

深入理解maven及应用(一):生命周期和插件

在项目里用了快一年的maven了,最近突然发现maven项目在eclipse中build时非常慢,因为经常用clean install命令来build项目,也没有管那么多,但最近实在受不了乌龟一样的b...
  • MINEZHANGHAO
  • MINEZHANGHAO
  • 2014年07月02日 09:11
  • 4357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven学习总结(17)——深入理解maven灵活的构建
举报原因:
原因补充:

(最多只允许输入30个字)