6

I new to maven and I am trying to create pom.xml to build the war files for different environment using profiles

So I created the build target

<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>

And then created the profiles for each environment

<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>

and I create a config folder for each 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

Now when I run this pom.xml with any profile for e.g. jboss, the files form config/jboss folder are not getting copied ( or I mean the files in src/main/resources are not getting replaced).

when I enabled the debug on on maven build I can see the copy getting executed.

 [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

But it is not replacing the files. The files are still the same as from src/main/resources.

Maven version is 3.0.4

Can someone help me what I am doing wrong ?

I have looked at this question. This provides a solution but I want to override the files rather then excluding them and then copy.

Community
  • 1
  • 1
NullPointerException
  • 3,732
  • 5
  • 28
  • 62
  • This is another basic example from Maven: http://maven.apache.org/guides/mini/guide-building-for-different-environments.html – Lunf Sep 24 '14 at 08:29

2 Answers2

9

I believe you'll have to add your resources to the maven-resources-plugin, inside a copy-resources execution.

<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>
kryger
  • 12,906
  • 8
  • 44
  • 65
bdkosher
  • 5,753
  • 2
  • 33
  • 40
  • we are not using maven-resources plugin – NullPointerException Apr 26 '13 at 18:36
  • 4
    You may not be explicitly using it in your POM, but it's a core Maven plugin and it's being implicitly used during your build lifecycle. Configuring the plugin is a way to get the plugin to copy resources from your custom source locations. – bdkosher Apr 26 '13 at 19:24
  • absolute life-saver! I was thinking about this in terms of renaming based on profile but couldn't figure out how to do that. This is much more elegant. Thanks – JonnyRaa Jun 16 '14 at 09:08
6

It worked after I added 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>
NullPointerException
  • 3,732
  • 5
  • 28
  • 62