Maven学习笔记(十一年):柔性结构
一个典型的项目将是开发环境、测试环境和生产环境,这些环境的数据库配置是不一样的,并使用正确的配置。
Maven为了支持构建的灵活性,内置了三大特性,即属性、Profile和资源过滤。本章将介绍这些特性。
Maven属性
2. POM属性:用户能够使用该类属性引用POM文件里相应元素的值。
比如${project.artifactId}就相应了<project><artifactId>元素的值,经常使用的POM属性包含:
- ${project.build.sourceDirectory}:项目的主源代码文件夹,默觉得src/main/java/。
- ${project.build.testSourceDirectory}:项目的測试源代码文件夹,默觉得src/test/java/。
- ${project.build.directory}:项目构建输出文件夹,默觉得target/。
- ${project.outputDirectory}:项目的主代码编译输出文件夹。默觉得target/classes/。
- ${project.testOutputDirectory}:项目測试代码编译输出文件夹。默觉得target/test-classes/。
- ${project.groupId}:项目的groupId。
- ${project.artifactId}:项目的artifactId。
- ${project.version}:项目的version。
- ${project.build.finalName}:项目打包输出文件的名称,默觉得${project.artifactId}-${project.version}。
<project>
...
<properties>
<my.prop>hello</my.prop>
</properties>
...
</project>
用户能够使用mvn help:system查看全部的Java系统属性。
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-email</artifacId>
<version>${project.version}</version>
</denpendency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>account-persist</artifacId>
<version>${project.version}</version>
</denpendency>
</dependencies>
构建环境的差异:
比如。我们在开发环境可能使用一套数据库配置,在线上环境可能使用另外一套数据库配置。相似的,对于缓存的配置、对于其它应用的RFC链接都可能在不同的生产环境下有不同的配置。
database.jdbc.driverClass=${db.driver}database.jdbc.connectionURL=${db.url}database.jdbc.username=${db.username}database.jdbc.password=${db.password}
<profiles>
<profile>
<id>dev</id>
<properties>
<db.driver>com.mysql.jdbc.Driver</db.driver>
<db.url>jdbc:mysql://192.168.1.100:3306/test</db.url>
<db.username>dev</db.username>
<db.password>dew-pwd</db.password>
</properties>
</profile>
</profiles>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resouces>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResouces>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>/src/main/sql</directory>
<filtering>false</filtering>
</resource>
</resouces>
这里激活了id为dev profile。
能够在处理完之后的资源文件里看到。全部maven属性都已经被替换了过来。
Maven profile:
除此之外,有些环境可能须要配置插件运行一些特殊的操作。或者使用特殊版本号的依赖,或者须要一个特殊的构件名称。为了能让构建在各个环境下方便地移植,Maven引入了profile的概念。profile可以在构建的时候改动POM的一个子集,或者加入额外的配置元素。用户可以使用非常多方式激活profile。以实现构建在不同环境下的移植。
比如,以下的命令激活了dev-x和dev-y两个profile:
<settings>
...
<activeProfiles>
<activeProfile>dev-x</activeProfile>
</activeProfiles>
</settings>
- pom.xml:非常显然。pom.xml中声明的profile仅仅对当前项目有效。
- 用户settings.xml:用户文件夹下.m2/settings.xml中的profile对本机上该用户全部的Maven项目有效。
- 全局settings.xml:Maven安装文件夹下conf/settings.xml中的profile对本机上全部的Maven项目有效。
也正是由于这个原因。一般不会在全局的settings.xml文件里加入profile。
<project>
<repositories></repositories>
<pluginRepositories></pluginRepositories>
<distributionManagement></distributionManagement>
<dependencies></dependencies>
<dependencyManagement></denpendencyManagement>
<modules></modules>
<properties></properties>
<reporting></reporting>
<build>
<plugins></plugins>
<defaultGoal></defaultGoal>
<resources></resources>
<testResources></testResources>
<finalName></finalName>
</build>
</project>
<project>
<repositories></repositories>
<pluginRepositories></pluginRepositories>
<properties></properties>
<project>
版权声明:本文博主原创文章,博客,未经同意不得转载。
Maven学习笔记(十一年):柔性结构的更多相关文章
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)
一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- python3.4学习笔记(十一) 列表、数组实例
python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- jQuery 学习笔记:jQuery 代码结构
jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...
- Maven学习笔记—仓库
Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...
随机推荐
- c#中的jQuery——HtmlAgilityPack
原文:c#中的jQuery--HtmlAgilityPack c#中是否有javascript中的jQuery类库? jQuery在访问和操作HTML 的DOM的便捷是前端开发工程师的一种福音,在c# ...
- 2013 吉林通化邀请赛 D-City 离线型的并查集
题意:给定n个点和m条边,问你拆掉前i条边后,整个图的连同城市的数量. i从1到m. 思路:计算连通的城市,很容易想到并查集,但是题目里是拆边,所以我们可以反向去做. 存下拆边的信息,从后往前建边. ...
- poj1087(最大流)
传送门:A Plug for UNIX 题意:有插座用电器和适配器,用电器有插头,适配器本身有一个插孔和插头,它的作用是可以把别的插头插入到适合该适配器插孔的适配器,然后就可以用适配器的插头接到适合的 ...
- python socket编程实现的简单tcp迭代server
与c/c++ socket编程对照见http://blog.csdn.net/aspnet_lyc/article/details/38946915 server: import socket POR ...
- iPhone、iPad强制关机
情景:iPad測试应用过程中死机了. 解决:同一时候按住右上方的电源键和屏幕下方的HOME键大约10秒左右. 就会自己主动强制断电关机,然后重新启动. 强制重新启动后你会看到进入苹果的标志,然后进入主 ...
- CCLuaObjcBridge调Objective-C方法传索引数组报invalid key to 'next'错调试
CCLuaObjcBridge是cocos2d-x系列引擎与Objective-C进行交互的"桥梁",老廖的quick-cocos2d-x在其framework进行了简单了封装,封 ...
- Filter基金会
一个.总结 简单的说,Filter的作用就是拦截(Tomcat的)service(Request,Response)方法.拿到Request.Response对象进行处理.然后释放控制.继续自己主动流 ...
- linux yum命令
1 安装yum install 全部安装yum install package1 安装指定的安装包package1yum groupinsall group1 安装程序组group1 2 更新和升级y ...
- jenkins 集成 redmine 账户验证的方案
jenkins 集成 redmine 账户验证的方案 赖勇浩(http://laiyonghao.com) 动机 Jenkins 是最著名的持续集成工具,又因为它开源免费.插件众多,成为了许多团队做持 ...
- 恩布企业 IM 安卓端 1.3,服务端 1.12 公布
恩布企业IM的 Android 安卓开源手机client EntboostIM 公布 1.3 版本号.同一时候恩布IM服务端更新至 1.12 版本号; 安卓端主要更新内容: 添加收发手机文件功能: 登 ...