2013-04-26 148 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