灵活构建
  项目的构建根据不同的情况可能需要有一定的差异,比如编译级别、依赖、打包的属性文件等在不同的运行环境中可能需要有不同的值。为了实现灵活构建,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>

maven 灵活构建的更多相关文章

  1. Maven实战读书笔记(六):Maven灵活构建

    Maven为了支持构建的灵活性,内置了3大特性,即:属性.Profile和资源过滤. 6.1 Maven属性 Maven的属性与Java代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管 ...

  2. Maven灵活构建(转载)

    https://blog.csdn.net/sin90lzc/article/details/7552033

  3. Maven 学习总结 (七) 之 灵活构建

    一个优秀的构建系统必须足够灵活,他应该能够让项目在不同的环境下都能成功地构建.Maven为支持项目的灵活性,内置了三大特性,即属性.Profile和资源过滤. Maven属性 通过<proper ...

  4. 11 Maven 灵活的构建

    Maven 灵活的构建 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时 ...

  5. Maven插件构建Docker镜像

    背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上.单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网 ...

  6. 用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)

    (软件环境) 『系统』Windows 10 x64 『JAVA』JDK 1.8.0_91 『Eclipse』 Eclipse-oxygen 『Maven』 apache-maven-3.6.3 『Je ...

  7. 准备阶段-maven项目构建

    依据我现阶段对maven的了解,具使用POM管理项目和强大的repository资源管理库支持. 在项目建立初期,对网站的可拓展.高并发.易于管理做了评估.最终使用Maven 管理该项目 . 如下是m ...

  8. 使用Eclipse+Maven+Jetty构建Java Web开发环境(几个教程综合集成2014发行)

    工作需要使用Jetty由于web集装箱,得知Eclipse+Maven+Jetty该组合是非常好的,因此,要在网上找了很多教程,但不写或多或少特定的或过时的内容而导致最终的配置失败,易于配置为未来的同 ...

  9. Maven学习-构建项目

    创建项目 运行如下命令会创建一个简单的Maven项目. mvn archetype:create -DgroupId=com.netease.learn -DartifactId=simple -Dp ...

随机推荐

  1. j2ee第五周

    一.AJAX技术 AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.它有机地包含了以下几种 ...

  2. IDEA2017 免费激活方法

    选择license server,然后填下面地址,选择一个就好. http://intellij.mandroid.cn/ http://idea.imsxm.com/ http://idea.ite ...

  3. admin 显示多对多字段

    class BookAdmin(admin.ModelAdmin): def 作者(self, object): return [a.name for a in object.author.all() ...

  4. 为什么使用zookeeper?

    随着应用规模的迅速扩张,单台机器的部署已经难以支撑用户大规模.高并发的请求了, 因此服务化.集群化.分布式概念应运而生. 针对这种场景,人们通常使用的做法就是将软件按照模块进行拆分,形成独立的子系统, ...

  5. error: ‘module’ object has no attribute ‘_rebuild_tensor_v2’

    import torch._utils try: torch._utils._rebuild_tensor_v2 except AttributeError: def _rebuild_tensor_ ...

  6. c#线程池ThreadPool实例详解

    1. 如何查看线程池的最大线程数和最小线程数 static void Main(string[] args) { Console.WriteLine("----------线程池开始,线程I ...

  7. OpenGL4.6+vs2017+CMake+Glad+Glfw-3.2.1+GLM随手记一发完整版OpenGL配置过程

    参考自:https://blog.csdn.net/sigmarising/article/details/80470054 下载过程参考上面的链接. 下载好的OpenGL文件夹我已经做好(具体的版本 ...

  8. Java ee Turorial Hello1 Hello1.java解析

    package javaeetutorial.hello1; import javax.enterprise.context.RequestScoped;import javax.inject.Nam ...

  9. js判断字段是否为空 isNull

    js判断字段是否为空 isNull   //在js中if条件为null/undefined/0/NaN/""表达式时,统统被解释为false,此外均为true .//为空判断函数f ...

  10. mybatis进行一对多时发现的问题总结

    1.定义一对多xml文件时,所有的resultMap中的column的值一定不要重复,否则mybatis会发生错误,如果有重名,定义别名,column中的名字一定要与查询出的名字一致,如: 52行的别 ...