Maven3_maven移植和属性过滤

maven移植-级别

不可移植

环境可移植

组织内部可移植

广义可移植

Maven移植-Profiles作用是:Profile允许你为移植或特殊的需要,自定义一个特殊的构建。

1、maven移植-Profiles位于pom.xml

Profile可以覆盖几乎所有的pom元素

<profile>
	<build>
		<defaultGoal>...</defaultGoal>
		<finalName>...</finalName>
		<resources>...</resources>
		<testResources>...</testResources>
		<plugins>...</plugins>
	</build>
	<reporting>...</reporting>
	<modules>...</modules>
	<dependencies>...</dependencies>
	<dependencyManagement>...</dependencyManagement>
	<distributionManagement>...</distributionManagement>
	<repositories>...</repositories>
	<pluginRepositories>...</pluginRepositories>
	<properties>...<properties>
</profile>

2、maven移植-Profiles位于profiles.xml

Profile抽取至profiles.xml文件中,将这种profile称为外部profile。注:maven3以后不再支持

3、maven移植-Profiles位于setting.xml

在setting.xml文件中配置profiles,会在所有的项目上生效。

4、maven移植-Profiles(激活方式)

a、通过调用id激活:mvn install -Pprofile-id

b、通过<activation>条件匹配激活

<activation>
	<activeByDefault>false</activeByDefault>
	<jdk>1.5</jdk>
	<os>
		<name>Windows XP</name>
		<family>Windows></family>
		<arch>x86</arch>
		<version>5.1.2600</version>
	</os>
	<file>
		<exists>file2.properties</exists>
		<missing>file1.properties</missing>
	</file>
</activation>
<activation>
	<activeByDefault>false</activeByDefault>
	<property>
		<name>mavenVersion</name>
		<value>2.0.5</value>
	</property>
	<!-- 是不是不存在这个环境变量的类型 -->
	<property>
		<name>!environment.type</name>
	</property>
</activation>

c、通过activeByDefault默认激活

<profile>
	<activation>
		<!-- 默认激活 -->
		<activeByDefault>true</activeByDefault>
	</activation>
</profile>

d、注意:只适用于settings.xml文件中激活profile,该设置只会激活settings profile,不会激活id匹配的pom.xml中的profile

<settings>
	<activeProfiles>
		<activeProfile>profile-id</activeProfile>
	</activeProfiles>
</settings>

------------------------------------------------------------------------------------------------------------------

************************************************************************************************************

------------------------------------------------------------------------------------------------------------------

实例:

需求:如何做到对所有的项目,开发环境和生产环境的数据库配置连接不同?

下面是原pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test.maven</groupId>
  <artifactId>test1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>test1</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>3.8.1</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
		<version>3.2.0.RELEASE</version>
	</dependency>
</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.7.1</version>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<profiles>
		<profile>
			<id>runTest</id>
			<!-- 激活profile -->
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<!-- 下面的build是覆盖上面的build从而达到控制是否跳过测试 -->
			<build>
				<plugins>
					<plugin>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>2.7.1</version>
						<configuration>
							<skip>false</skip>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
</project>

把上面的build标签中加入resources标签,制定路径以及是否过滤。

<build>
		<!-- src/main/resources路径下的进行属性过滤 -->
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.7.1</version>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
	</build>

项目结构图:

db.properties内容

driverClassName=${jdbc.driverClassName}
url=${jdbc.url}
username=${jdbc.username}
password=${jdbc.password}
property1=${property1}

在pom.xml中的profiles中加入以下profile

<!-- 在setting.xml中配置environment.type,为dev时激活oracle的配置,为prod时激活mysql的配置 -->
	<profile>
		<id>development</id>
		<activation>
			<property>
				<name>environment.type</name>
				<value>dev</value>
			</property>
		</activation>
		<properties>
			<jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
			<jdbc.url>jdbc:oracle:thin:@proddb01:1521:DEV</jdbc.url>
			<jdbc.username>dev_user</jdbc.username>
			<jdbc.password>devpass</jdbc.password>
		</properties>
	</profile>

	<profile>
		<id>production</id>
		<activation>
			<property>
				<name>environment.type</name>
				<value>prod</value>
			</property>
		</activation>
		<properties>
			<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
			<jdbc.url>jdbc:mysql://localhost:3306/production_db</jdbc.url>
			<jdbc.username>prod_user</jdbc.username>
			<jdbc.password>prodpass</jdbc.password>
		</properties>
	</profile>

在settings.xml中的profiles中加入:

<profile>
		<id>environment</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<properties>
			<environment.type>dev</environment.type>
			<property1>2</property1>
		</properties>
	</profile>

	<profile>
		<id>product</id>
		<activation>
			<property>
				<name>environment.type</name>
				<value>prod</value>
			</property>
		</activation>
		<properties>
			<database.password>sdfsdf</database.password>
			<property1>3</property1>
		</properties>
	</profile>

执行mvn clean install,打开target下的classes中的db.properties

可以看到db.properties被改变了。

如果生产环境中的数据库连接、密码等信息不希望别人看到,我们可以在settings.xml中配置,运行后会覆盖pom.xml中的配置。我们可以在pom.xml中定义一些假的数据。

把settings.xml中生产环境下的properties改变了,如下:

<profile>
		<id>environment</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<properties>
			<environment.type>dev</environment.type>
			<property1>2</property1>
		</properties>
	</profile>

	<profile>
		<id>product</id>
		<activation>
			<property>
				<name>environment.type</name>
				<value>prod</value>
			</property>
		</activation>
		<properties>
			<jdbc.driverClassName>update_className</jdbc.driverClassName>
			<jdbc.url>update_url</jdbc.url>
			<jdbc.username>update_username</jdbc.username>
			<jdbc.password>update_password</jdbc.password>
			<property1>3</property1>
		</properties>

这样执行mvn clean install -Denvironment.type=prod执行就可以看到db.properties改变成settings.xml中定义的了。(-Denvironment.type=prod是指定激活属性叫environment.type是prod的profile)

时间: 2024-08-30 08:01:32

Maven3_maven移植和属性过滤的相关文章

JQuery选择器学习整理(基本选择器,层级选择器,伪类选择器,属性过滤,内容过滤,可见性过滤,范围选择器,排除选择器)

总的来说,选择器引擎规则就是: $('查询字符串'). 最常用最基本的就是:1.标签选择器(以文档元素作为选择符):$("div"): 2.id选择器(以ID作为选择符): $("#demo1"): 3.类选择器(以class作为选择符): $(".selected"): 4.群组选择器: $(".class1, .class2, .class3"): 5.后代选择器: $("p span") 多种规则的组

一步一步学习 JQuery (四) 过滤选择器:属性过滤选择器 &amp;&amp; 子元素过滤选择器 &amp;&amp; 表单过滤选择器

四.属性过滤选择器 属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素 选取下列元素,改变其背景色为 # bbffaa 含有属性title 的div元素. 属性title值等于"test"的div元素. 属性title值不等于"test"的div元素(没有属性title的也将被选中). 属性title值 以"te"开始 的div元素. 属性title值 以"est"结束 的div元素. 属性title值 含有"

jQuery之属性过滤选择器

转自:http://blog.csdn.net/woshisap/article/details/7341136 在HTML文档中,元素的开始标记中通常包含有多个属性(attribute), 在jQuery中,除了直接使用id和class属性作为选择器之外,还可以根据各种属性(如title等)对由选择器 查询到的元素进行过滤,属性过滤选择器包含了在中括号"[]"中,而不是以冒号开头,通常使用"选择器[属性过滤选择器]"语法格式,可以根据是否包含指定属性或者 根据属性

黑马day16 jquery&amp;属性过滤选择器

属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素 1.[attribute] 用法: $("div[id]") ;  返回值  集合元素 说明:匹配包含给定属性的元素.例子中是选取了所有带"id"属性的div标签. 2.[attribute=value] 用法: $("input[name='newsletter']").attr("checked", true);    返回值  集合元素 说明:匹配给定的属性是某个

JQuery属性过滤(转)

属性过滤(Attribute Filters)的内容就是html元素中的属性 其包括以下几个选择器: [attribute] [attribute=value] [attribute!=value] [attribute^=value] [attribute$=value] [attribute*=value] [attributeFilter1][attributeFilter2][attributeFilterN] [attribute]用法: $(“div[id]“) ;说明: 匹配包含给

jQuery属性过滤选择器

1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <!-- jQuery属性过滤选择器 --> 6 <

jQuery表单对象属性过滤选择器

1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <!-- jQuery表单对象属性过滤选择器 --> 6

sphinx设置多属性过滤的方法(setFilter)

需求描述 mysql中,每一个文档都有多个标签,查询时可以筛选一个标签也可以筛选同时拥有多个标签的文档. 数据示例 文档 标签   1    1,2,3,4,5   2    2,3,4,5,6   3    3,4,5,6,7   4    4,5,6,7,8   5    5,6,7,8,9 注意: 这里将文档id和标签tagid的对应关系存入了fy_content_tag表,一个id对应多条tagid记录 查询要求 1.查出拥有标签2的文档 2.查出同时拥有标签2,3,4的文档 使用sph

过滤选择器——属性过滤选择器

属性过滤选择器根据元素的某个属性获取元素,如ID号或匹配属性值的内容,并以"["号开始.以"]"号结束.其详细的说明如表: 选择器 功能 返回值  [attribute]  获取包含给定属性的元素 元素集合   [attribute=value]  获取等于给定的属性是某个特定值得元素  元素集合   [attribute!=value]  获取不等于给定的属性是某个特定值的元素 元素集合   [attribute^=value]  获取给定的属性是以某些值开始的元