2013-04-26 83 views
6

我新来Maven和我想创建的pom.xml以建立不同的使用环境配置文件如何创建Maven构建配置文件来有条件地复制文件?

战争文件,所以我创建的构建目标

<build> 
<finalName>myacct_okc</finalName> 
<resources> 
    <resource> 
    <directory>src/main/java</directory> 
    <excludes> 
     <exclude>**/*.java</exclude> 
    </excludes> 
    </resource> 
    <resource> 
    <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
    <directory>config/${environment}</directory> 
    </resource> 
</resources> 
</build> 

然后创建的配置文件为每个环境

<profiles> 
<profile> 
    <id>local</id> 
    <activation> 
    <activeByDefault>false</activeByDefault> 
    </activation> 
    <properties> 
    <environment>local</environment> 
    </properties> 
</profile> 
<profile> 
    <id>jboss</id> 
    <properties> 
    <environment>jboss</environment> 
    </properties> 
</profile> 
<profile> 
    <id>dev</id> 
    <properties> 
    <environment>dev</environment> 
    </properties> 
</profile> 

和我创建一个config文件夹中的每个ENV

project root 
|-- src 
| |-- main 
| | |-- java 
| | |-- resources 
| | | |-- config.xml 
| | | +-- config.properties 
| | |-- webapp 
| | | |-- META-INF 
| | | | +--context.xml 
| | |-- config 
| | | |-- local 
| | | | |--config.properties 
| | | | +--config.xml 
| | | |-- jboss 
| | | | |--config.properties 
| | | | +--config.xml 
| | | +-- dev 
| | | | |--config.properties 
| | | | +--config.xml 
+--pom.xml 

现在,当我运行这个pom.xml中与例如任何个人资料jboss,config/jboss文件夹的文件不会被复制(或者我的意思是src/main/resources中的文件没有被替换)。

当我启用了调试上Maven构建我可以看到越来越执行复制。

[DEBUG] resource with targetPath null 
directory C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss 
excludes [] 
includes [] 
[DEBUG] ignoreDelta true 
[INFO] Copying 2 resources 
[DEBUG] file config.xml has a filtered file extension 
[DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\config.xml to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\config.xml 
[DEBUG] file config.properties has a filtered file extension 
[DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\META-INF\config.properties to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\META-INF\config.properties 

但它并没有替代文件。这些文件仍然来自src/main/resources。

Maven的版本是3.0.4

有人可以帮助我什么,我做错了什么?

我已经看过这个question。这提供了一个解决方案,但我想重写文件,而不是排除它们,然后复制。

+0

后,这是从另一个Maven的基本的例子: http://maven.apache.org/guides/mini/guide-building-for-different- environments.html – Lunf 2014-09-24 08:29:16

回答

6

它的工作我添加filtering= true

<build> 
<finalName>myacct_okc</finalName> 
<resources> 
<resource> 
    <directory>src/main/java</directory> 
    <excludes> 
    <exclude>**/*.java</exclude> 
    </excludes> 
</resource> 
<resource> 
    <filtering>true</filtering> 
    <directory>src/main/resources</directory> 
</resource> 
    <resource> 
    <filtering>true</filtering> 
    <directory>config/${environment}</directory> 
    </resource> 
    </resources> 
</build> 
+5

过滤用maven属性值替换文件中的$(something) – 2014-06-16 08:46:19

7

我相信你有你的资源添加到Maven的资源 - 插件,复制资源执行内部。

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>copy-config</id> 
     <phase>copy-resources</phase> 
     <goals> 
     <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     <resources> 
      <resource> 
      <directory>src/main/java</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
      </resource> 
      <resource> 
      <directory>src/main/resources</directory> 
      </resource> 
      <resource> 
      <directory>config/${environment}</directory> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+0

我们不使用maven-资源插件 – NullPointerException 2013-04-26 18:36:46

+4

在你的POM使用它你可能不明确的,但它是一个核心Maven插件,它是你的构建生命周期过程中隐含地使用。配置插件是让插件从您的自定义源位置复制资源的一种方式。 – bdkosher 2013-04-26 19:24:42

+0

绝对的救命!我正在考虑基于配置文件重命名,但无法弄清楚如何做到这一点。这更优雅。谢谢 – 2014-06-16 09:08:58