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

    创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 a) 在li4 之前插入一个工人,信息 ...

  2. Python条件判断 if-else for循环 while循环 break continue

    条件判断 if-else if-else语句是通过if 后面的是否为真,当为True,就执行if代码块后面的,如果为False,同时又有else语句,执行else后面的内容.没有else,什么都不执行 ...

  3. pycharm中连接数据库常见问题

    pymysql.err.InterfaceError: (0, '')解决办法   导致这个错误的原因是通过pymysql连接MySQL,没有关闭连接的操作,所以短时间内不会出问题,长时间保持这个连接 ...

  4. clusterware启动顺序——CSS

    CSS层面 1.ocssd.bin守护进程 该层面最主要的工作就是启动ocssd.bin守护进程.使本地节点能够成功地加入集群.ocssd.bin守护进程的启动过程可以通过以下的图形进行描述. ::: ...

  5. 初读"Thinking in Java"读书笔记之第三章 --- 操作符

    更简单的打印语句 导入自己编写的静态类库,即可使用print();打印 使用Java操作符 操作符:+,-,*,/,=,==,!=,+=,?:,%等 几乎所有操作符都只能操作"基本类型&qu ...

  6. MVC简单增删改

    /// <summary> /// /显示分页 /// </summary> /// <param name="model"></para ...

  7. WebStorm Goland PyCharm 等JetBrains验证服务器

    http://idea.iteblog.com/key.php http://idea.idbry.com 2017年12月08日20:05:08 http://xdouble.cn:8888/ ht ...

  8. PHP 出现中文乱码的问题

    在代码中添加 <?php //设置页面显示的文字编码 头部就写header函数处理成utf-8 header("Content-Type:text/html;charset=utf-8 ...

  9. re+正则01

    # 正则 # 正则 ''' 正则就是带语法的字符串, 用来匹配目标字符串得到想要得字符串结果 ''' # 部分语法: # 1.单独字符 # \d 范围 [0-9] # \D 范围刨除 [^0-9] # ...

  10. npm ERR! Unexpected end of JSON input while parsing near...错误

    问题解决方案在GitHub中: https://github.com/vuejs-templates/webpack/issues/990 总结一下:1.删除package-lock.json 2.进 ...