灵活构建
  项目的构建根据不同的情况可能需要有一定的差异,比如编译级别、依赖、打包的属性文件等在不同的运行环境中可能需要有不同的值。为了实现灵活构建,Maven内置了三个特性:

属性:在POM中通过${属性名称}引用构建时的属性值,从而达到灵活构建的目的,主要有六种属性,包括内置属性、POM属性、自定义属性、setting属性、Java系统属性、 环境变量属性。

属性替换可以在pom.xml和资源文件中使用,在资源文件中使用时需要开启资源文件过滤,pom.xml是默认开启的。可以使用的属性如下:

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

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

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

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

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

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

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

3.   自定义属性:用户可以在pom的元素下自定义maven属性。

4.  
setting属性:用户可以使用以settings开头的属性引用settings.xml中xml元素的值,如

${settings.localRepository}指向用户本地仓库的地址。

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

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

profile:profile能够定义多个POM的子集,在构建的时候动态激活某个profile,从而修改POM。
资源过滤:资源过滤是指Maven对项目资源文件内容进行变量替换。在资源过滤被激活的时候,Maven会扫描资源,寻找由${}包围的Maven属性的引用。一旦找到这些引用,就会使用合适的值去替换它们.

案例1、灵活构建测试环境和开发环境,(前提需要开启资源文件过滤)

  <!-- 灵活构建 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
<jdbc.ur>jdbc:oracle:thin:@localhost:1521:XE</jdbc.ur>
<jdbc.username>hr</jdbc.username>
<jdbc.password>hr</jdbc.password>
<project.build.sourceEncoding>gbk</project.build.sourceEncoding>
</properties>
<!-- 默认激活 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
<jdbc.ur>jdbc:oracle:thin:@localhost:1521:XE</jdbc.ur>
<jdbc.username>test</jdbc.username>
<jdbc.password>test</jdbc.password>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
</profile>
</profiles>
  <build>
<!-- 插件配置 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>

案例2、如果属性过多,导致POM文件过大,(${profile.id}.properties 注意)

<!-- 灵活构建 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<profile.id>dev</profile.id>
</properties>
<!-- 默认激活 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profile.id>test</profile.id>
</properties>
</profile>
</profiles>
<build>
<!-- 插件配置 -->
<filters>
<filter>src/main/filters/${profile.id}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>

最新文章

  1. jQuery基础_4
  2. 【目录】Leetcode
  3. 导入导出oracle数据库表的dmp文件
  4. Django笔记-常见错误整理
  5. 使用html5 canvas绘制图片
  6. Redis集群的配置
  7. A strange lift_BFS
  8. Google Kubernetes设计文档之服务篇-转
  9. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
  10. git创建和删除远程分支
  11. 将java项目打包成jar文件并在cmd运行
  12. js 动态添加元素(div、li、img等)及设置属性
  13. UdpClient的Connect究竟做了什么(转)
  14. C# 虚方法 抽象方法 接口
  15. 《响应式Web设计&mdash;HTML5和CSS3实战》 学习记录
  16. Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)
  17. windows下安装Rabbitmq详解
  18. 使用Chrome远程调试GenyMotion上的WebView程序
  19. LB+ECS+RDS经典架构图例及注意事项
  20. 2017-3-30/HTTP协议2

热门文章

  1. 掩码图制作----c语言贴图
  2. C# XML反序列化与序列化举例:XmlSerializer(转)
  3. python单列模式
  4. leetcode 415 两个字符串相加
  5. python 第三方库 dateutil.parser 使用说明
  6. 使用RevoUninstaller Pro卸载
  7. 网页中,鼠标点击与javascript的click事件怎么区分处理
  8. Spring 基于构造函数的依赖注入
  9. iframe嵌套vue页面打开新窗口
  10. java 基础代码