`
xigua366
  • 浏览: 101151 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Maven资源过滤应用

阅读更多

第一步,使用maven创建一个简单的project。
这里取名为maven-demo,工程目录结构如下图:



 

pom.xml 配置文件如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<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.shell.maven.demo</groupId>
	<artifactId>maven-demo</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<name>maven-demo</name>
	<url>http://maven.apache.org</url>
	
        <!-- 指定私服  -->
	<repositories>
		<repository>
			<id>myRepo</id>
			<name>myRepo Repository</name>
			<url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>myRepo</id>
			<name>myRepo Repository</name>
			<url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
	
	<build>
		<!-- 指定在jdk1.6环境下编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

 

 

第二步,添加对Spring等第三方依赖。

pom.xml配置文件修改成如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<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.shell.maven.demo</groupId>
	<artifactId>maven-demo</artifactId>
	<version>1.0.0-SNAPSHOT</version>

	<name>maven-demo</name>
	<url>http://maven.apache.org</url>
	
	<properties>
		<springframework.version>3.1.0.RELEASE</springframework.version>
	</properties>

       <!-- 指定私服  -->
	<repositories>
		<repository>
			<id>myRepo</id>
			<name>myRepo Repository</name>
			<url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>myRepo</id>
			<name>myRepo Repository</name>
			<url>http://maven.shell.com.cn:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
	
	<build>
		<!-- 指定在jdk1.6环境下编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencies>
		<!-- spring 有关jar -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<!-- oracle 驱动 -->
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0.3.0</version>
		</dependency>

		<!-- 采用dbcp数据源 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
                
                <!-- comomons jar -->
			<dependency>
				<groupId>commons-lang</groupId>
				<artifactId>commons-lang</artifactId>
				<version>2.4</version>
			</dependency>

			<dependency>
				<groupId>commons-io</groupId>
				<artifactId>commons-io</artifactId>
				<version>2.4</version>
			</dependency>

			<dependency>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging</artifactId>
				<version>1.1.1</version>
			</dependency>

			<dependency>
				<groupId>commons-collections</groupId>
				<artifactId>commons-collections</artifactId>
				<version>3.2</version>
			</dependency>

			<dependency>
				<groupId>commons-beanutils</groupId>
				<artifactId>commons-beanutils</artifactId>
				<version>1.8.3</version>
			</dependency>
	</dependencies>
	
	
</project>

 

 

 第三步,在classpath目录下创建spring配置文件applicationContext.xml,同时定义id="dataSource"及id="jdbcTemplate"的bean。

applicationContext.xml配置文件如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
	http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="url" value="${jdbc.url}"/> 
		<property name="driverClassName" value="${jdbc.driverClassName}"/>  
		<property name="username" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		<property name="initialSize" value="1"/>
		<property name="maxActive" value="2"/>
	</bean>
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
</beans>

 

 

第四步,修改pom.xml配置文件,添加数据库连接相关的属性定义,同时开启maven资源过滤。

pom.xml配置文件修改成如下:

<?xml version="1.0" encoding="UTF-8"?>
<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.shell.maven.demo</groupId>
	<artifactId>maven-demo</artifactId>
	<version>1.0.0-SNAPSHOT</version>

	<name>maven-demo</name>
	<url>http://maven.apache.org</url>
	
	<properties>
		<!-- system property -->
		<encoding>UTF-8</encoding>
		<maven.test.skip>true</maven.test.skip>
		<skipTests>true</skipTests>
		
		<springframework.version>3.1.0.RELEASE</springframework.version>
		
		<!-- jdbc properties 本地连接的配置 -->
		<jdbc.url>jdbc:oracle:thin:@localhost:1521:shell</jdbc.url>
		<jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
		<jdbc.username>scott</jdbc.username>
		<jdbc.password>yangxi2010</jdbc.password>
	</properties>
	
	<repositories>
		<repository>
			<id>myRepo</id>
			<name>myRepo Repository</name>
			<url>http://maven.infinitus.com.cn:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>myRepo</id>
			<name>myRepo Repository</name>
			<url>http://maven.infinitus.com.cn:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
	
	<build>
		
		<!-- 对主资源目录开启资源过滤 -->
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
		
		<!-- 指定在jdk1.6环境下编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencies>
		<!-- spring 有关jar -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${springframework.version}</version>
		</dependency>

		<!-- oracle 驱动 -->
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0.3.0</version>
		</dependency>

		<!-- 采用dbcp数据源 -->
			<dependency>
				<groupId>commons-dbcp</groupId>
				<artifactId>commons-dbcp</artifactId>
				<version>1.4</version>
			</dependency>

			<!-- comomons jar -->
			<dependency>
				<groupId>commons-lang</groupId>
				<artifactId>commons-lang</artifactId>
				<version>2.4</version>
			</dependency>

			<dependency>
				<groupId>commons-io</groupId>
				<artifactId>commons-io</artifactId>
				<version>2.4</version>
			</dependency>

			<dependency>
				<groupId>commons-logging</groupId>
				<artifactId>commons-logging</artifactId>
				<version>1.1.1</version>
			</dependency>

			<dependency>
				<groupId>commons-collections</groupId>
				<artifactId>commons-collections</artifactId>
				<version>3.2</version>
			</dependency>

			<dependency>
				<groupId>commons-beanutils</groupId>
				<artifactId>commons-beanutils</artifactId>
				<version>1.8.3</version>
			</dependency>
	</dependencies>
	
	
</project>

 

 

 

第五步,在main方法中启动spring容器,使用jdbcTemplate查询一条数据出来。

本地数据库现在存在一张emp表,表中含有的数据如下图:



 

现在将empNo为7369的这条记录查询出来并在控制台输出。

main方法代码如下图:

/**
 * Test.java 2014年6月13日
 */
package com.shell.maven.demo;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;

/**
 * <p>
 * <b>Test</b> 是
 * </p>
 *
 * @since 2014年6月13日
 * @author shell
 * @version $Id$
 */
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 启动spring 容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

		JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
		// 查询数据
		String sql = "select empno, ename, job from EMP ";
		String result = jdbcTemplate.query(sql, new ResultSetExtractor<String>() {

			public String extractData(ResultSet rs) throws SQLException, DataAccessException {
				rs.next();
				String empNo = rs.getString(1);
				String eName = rs.getString(2);
				String job = rs.getString(3);
				return "empNo:" + empNo + ", eName:" + eName + ", job:" + job;
			}
		});
		System.out.println(result);
	}

}

 

第六步,编译maven-demo 工程。

在命令行执行 mvn clean install命令,入下图:

开始执行命令



 

编译成功结果



 

第七步,执行main方法,结果入下图:



 看到上图蓝色框中的内容,表示数据查询操作成功。

此时我们可以去到classpath目录下查看applicationContext.xml文件的内容,结果如下图:



 如上图所示,${jdbc.url}等变量被成功替换了。

 

maven的这个资源过滤特性可以帮助我们隔离开发环境和生产环境。不过要配合maven的profile配置才好用,

下面在pom.xml增加一个profile配置,用于配置生产环境的数据库连接信息。

 

第八步,配置生产环境数据库连接信息的profile

pom.xml配置文件增加如下配置:

 

<profiles>
		<profile>
			<id>prod</id>
			<properties>
				<!-- jdbc properties 生产连接的配置 -->
				<jdbc.url>jdbc:oracle:thin:@172.20.70.28:1521:gbst</jdbc.url>
				<jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
				<jdbc.username>CBSPROD2</jdbc.username>
				<jdbc.password>CBSPROD2</jdbc.password>
			</properties>
		</profile>
	</profiles>
 重启编译后再看编译后的applicationContext.xml文件。(不过这时编译的命令要变一下,具体见第九步操作)
第九步,重新编译工程。(使用profile中的配置,个性化编译)


 注意上面敲的是mvn clean install -P prod 命令,这里的-P表示使用profile的配置,prod是配置的生产数据库连接信息的profile的id名称。执行上诉命令后,id为prod的profile中的配置就会替换掉pom.xml中配置的相应的原内容。(这里替换的是properties中的内容)


提示编译成功,这是先去看下编译后的applicationContext.xml文件。
如下图:
 

 从上图可以看到,数据库连接信息确实被替换成生产的了。
可以再次去查询生产库的中数据,验证效果。
--------------------------------------------------------
resource下的其它节点,见下图:


 
还有excludes  includes  targetPath 三个节点,具体用法可根据名称含义敲代码进行验证。
 我的理解及验证结果如下:
<build>
		
		<!-- 主资源目录 -->
		<resources>
			<resource>
				<!-- 设定主资源目录  -->
				<directory>src/main/resources</directory>
				
				<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,只处理如下配置中包含的资源类型 
				<includes>
					<include>*.xml</include>
				</includes>
				 -->
				 
				<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,不处理如下配置中包含的资源类型(剔除下如下配置中包含的资源类型) 
				<excludes>
					<exclude>*.xml</exclude>
				</excludes>
				-->
				
				<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,指定处理后的资源文件输出目录,默认是${build.outputDirectory}指定的目录
				<targetPath>d:/</targetPath>
				   -->
				  
				<!-- maven default生命周期,process-resources阶段执行maven-resources-plugin插件的resources目标处理主资源目下的资源文件时,是否对主资源目录开启资源过滤 -->
				<filtering>true</filtering>
				
			</resource>
		</resources>
	</build>
 
  • 大小: 41.6 KB
  • 大小: 629.6 KB
  • 大小: 86.5 KB
  • 大小: 210.3 KB
  • 大小: 754 KB
  • 大小: 1 MB
  • 大小: 133.4 KB
  • 大小: 210 KB
  • 大小: 260.5 KB
  • 大小: 33.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics