属性 自定义属性 资源过滤



通过${}访问属性

。Maven提供了隐式的变量,可以用来访问环境变
量,POM信息,和Maven Settings:
env
env变量暴露了你操作系统或者shell的环境变量。

project
project变量暴露了POM。你可以使用点标记(.)的路径来引用POM元素
的值。例如,${project.artifactId}。

settings
settings变量暴露了Maven settings信息。可以使用点标记(.)的路径来引
用settings.xml文件中元素的值。例如,${settings.offline}会引用~/.m2/
settings.xml文件中offline元素的值。

系统属性,只要是能通过System.getProperty()方法获取的属性都可以作为Maven属性被引 用

除了隐式变量,还提供一些非隐式功能

Java系统属性
所有可以通过java.lang.System中getProperties()方法访问的属性都被暴露
成POM属性。具体能访问到什么属性,可以查看java.lang.System类的Javadoc中找到。


项目的属性
[url]http://maven.apache.org/ ref/2.0.9/maven-model/maven.html[/url]

常用的“
project.groupId 和 project.version
project.name
project.description
• project.build.sourceDirectory
• project.build.scriptSourceDirectory
• project.build.testSourceDirectory
• project.build.outputDirectory
• project.build.testOutputDirectory
• project.build.directory
sourceDirectory,scriptSourceDirectory,和testSourceDirectory提供了项 目源码目录的访问方式。outputDirectory和testOutputDirectory则能让你访问 Maven放置字节码和其它构建输出的目录。directory引用的目录就是包含上述两 个输出目录的父目录。


Maven的Settings属性
你也可以引用任何Maven本地Settings文件的属性,该文件通常位于~/.m2/ settings.xml。



环境变量属性
环境变量可以通过env.*前缀引用。以下列表是一些有趣的环境变量:
env.PATH 包含了Maven运行的当前PATH。该PATH包含了一个用来查找可运行脚本和程序的 目录列表,
env.HOME (在*nix系统中)这个变量指向了用户的home目录。但你更应该使用/home/ hudson,而非这个变量。
env.JAVA_HOME 指向了Java安装目录。它要么指向JDK安装目录,要么或者JRE目录。但你更应该 考虑使用/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre而非这个属性。
env.M2_HOME 指向了Maven2安装目录



自定义属性
我们还可以通过pom.xml或者settings.xml中的properties元素设置自己的属
性,或者还可以使用外部载入的文件中属性。


<project>
  ...
  <properties>
    <arbitrary.property.a>This is some text</arbitrary.property.a>
    <hibernate.version>3.3.0.ga</hibernate.version>
  </properties>
  ...
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernate.version}</version>
    </dependency>  
  </dependencies>
  ...
</project>









资源过滤
你可以使用Maven来对项目资源进行变量替换。在资源过滤被激活的时候,Maven会扫描 资源,寻找由${ 和}包围的Maven属性的引用。一旦它找到这些引用,它就会使用合适 的值去替换它们,就像前一节中定义的属性可以在POM中引用一样。当你需要根据目标 部署平台使用不同的配置来参数化一个构建的时候,这就非常有用。


通常一个在src/main/resources目录下的.properties文件或者XML文档会包含对外部资 源的引用,如需要根据目标部署平台进行不同配置的数据库或网络地址。例如,一个从 数据库读取数据的系统有一个XML文档,其包含了数据库的JDBC URL以及安全凭证。如 果你在开发和产品环境使用不同的数据库。你可以选择使用一种技术如JNDI将配置信息 从应用程序提取出来至应用服务器,或者你可以创建一个知道如何根据目标平台用不同 的值替换变量的构建。



假设SPRING的配置关于数据库配置部分是
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="someDao" class="com.example.SomeDao">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
</beans>




POM

<project>
  ...
  <properties>
    <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
    <jdbc.url>jdbc:mysql://localhost:3306/development_db</jdbc.url>
    <jdbc.username>dev_user</jdbc.username>
    <jdbc.password>s3cr3tw0rd</jdbc.password>
  </properties>
  ...
  <build>
    <resources>
      <resource>src/main/resources</resource>
      <filtering>true</filtering>
    </resources>
  </build>
  ...
  <profiles>
    <profile>
      <id>production</id>
      <properties>
        <jdbc.driverClassName>oracle.jdbc.driver.OracleDriver</jdbc.driverClassName>
        <jdbc.url>jdbc:oracle:thin:@proddb01:1521:PROD</jdbc.url>
        <jdbc.username>prod_user</jdbc.username>
        <jdbc.password>s00p3rs3cr3t</jdbc.password>
      </properties>
    </profile>  
  </profiles>
</project>



maven默认资源过滤是关闭的,通过 <resources>
      <resource>src/main/resources</resource>
      <filtering>true</filtering>
    </resources>
开启资源过滤

另外如上profile功能的存在,在不同环境,数据库的连接配置也会变化。

猜你喜欢

转载自liyixing1.iteye.com/blog/2171319