2013-07-11 33 views
1

假设我在我的pom.xml文件中声明了以下属性。使用Maven为不同环境构建应用程序(dev,staging,prod)

<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/maven-v4_0_0.xsd"> 

    // .... 

    <properties> 
     <dev.url>http://dev.mysite.com</dev.url> 
     <staging.url>http://staging.mysite.com</staging.url> 
     <prod.url>http://prod.mysite.com</prod.url> 
    </properties> 

</project> 

我想要做的是有不同的运行配置,并根据我设置的某些标志来读取相应的属性。例如,在为生产构建时,要在运行时读取prod.url属性,在构建阶段时读取staging.url属性。

+0

这不是放置属性的适当位置。把它们放在android资源中。 – njzk2

+0

您可以在每次构建项目时创建一个脚本,该脚本将您的pom.xml文件复制到资产文件夹中。然后您可以解析它 – VinceFR

+0

@ njzk2构思是这个属性对于不同的环境会有所不同(构建,生产,分期)。理想情况下,我会有不同的运行配置,启动时会读取相应的属性。如果我将它们放在Android资源中,是否有办法从运行配置中传递一个标志,以便在运行时选择适当的资源(无需手动编辑代码并更改环境)? –

回答

1

下面是我如何解决它:
这个想法是将所有的属性存储在单独的资源文件中。然后,使用maven resource plugin复制相应的属性文件到values/environment.xml

在项目根目录下建立如下的目录结构:

environment/dev/environment.xml 
environment/prod/environment.xml 

然后填写资源文件的内容用适当的值。

/dev/environment.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="url">http://dev.mysite.com</string> 
</resources> 

/prod/environment.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="url">http://prod.mysite.com</string> 
</resources> 

通过指定阶段时,这个动作加入Maven的资源插件来pom.xml应执行,要复制的资源以及输出目录:

//... 
<plugins> 
    <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <id>copy-string-resources</id> 
       <phase>validate</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <resources> 
         <resource> 
          <directory>environment/${environment}/</directory> 
          <includes> 
           <include>environment.xml</include> 
           <filtering>true</filtering> 
          </includes> 
         </resource> 
        </resources> 
        <overwrite>true</overwrite> 
        <outputDirectory>${basedir}/res/values/</outputDirectory> 
       </configuration> 
     </plugin> 
</plugins> 

从这一点来说,你可以创建2种运行配置:

mvn validate -Denvironment=dev 
mvn validate -Denvironment=prod 

,会做什么,但来自evironment/${environment}/environment.xml复制相应的资源,为values/environment.xml

根据运行配置的,${environment}将与dev等于或prod

你可以在this页面找到更多相关资讯。

相关问题