Monday, April 4, 2016

Maven filtering not select the good files

Leave a Comment

My project structure:

- src     - main     - java     - resources     |   -hibernate.cfg.xml     |   -log4j.properties     - config     |   -dev     |   |   -hibernate.cfg.xml     |   |   -log4j.properties 

I use maven-war-plugin for filtering with maven.

pom.xml:

<profiles>     <profile>         <id>dev</id>         <activation>             <activeByDefault>true</activeByDefault>         </activation>         <properties>             <profileVersion>DEV</profileVersion>             <filterFile>src/main/filters/filter-dev.properties</filterFile>             <configFolder>src/main/config/dev/</configFolder>         </properties>     </profile> </profiles> <plugin>     <groupId>org.apache.maven.plugins</groupId>     <artifactId>maven-war-plugin</artifactId>     <version>2.6</version>     <configuration>         <filters>             <filter>src/main/filters/filter.properties</filter>             <filter>${filterFile}</filter>         </filters>         <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>         <webResources>             <resource>                 <directory>${configFolder}</directory>                 <includes>                     <include>log4j.properties</include>                     <include>hibernate.cfg.xml</include>                 </includes>                 <targetPath>/WEB-INF/classes/</targetPath>             </resource>         </webResources>         <failOnMissingWebXml>false</failOnMissingWebXml>     </configuration>     <executions>         <execution>             <id>default-war</id>             <phase>none</phase>             <goals>                 <goal>war</goal>             </goals>         </execution>         <execution>             <id>package-war</id>             <phase>package</phase>             <goals>                 <goal>war</goal>             </goals>         </execution>     </executions> </plugin> 

Output console:

[INFO] --- maven-war-plugin:2.6:war (package-war) @ with --- [INFO] Packaging webapp [INFO] Assembling webapp [with] in [D:\workspace\with\target\with-0.0.1-SNAPSHOT] [INFO] Processing war project [INFO] Copying webapp webResources [D:\workspace\with\src/main/config/dev/] to [D:\workspace\with\target\with-0.0.1-SNAPSHOT] [INFO] Copying webapp webResources [D:\workspace\with\src/main/config/dev/] to [D:\workspace\with\target\with-0.0.1-SNAPSHOT] [INFO] Copying webapp resources [D:\workspace\with\src\main\webapp] [INFO] Webapp assembled in [13732 msecs] [INFO] Building war: D:\workspace\with\target\with-0.0.1-SNAPSHOT.war [INFO] 

My problem is when i see in the war file hibernate.cfg.xml and log4J.properties are not those of the dev profile but those resources folder, why ..?

2 Answers

Answers 1

Filtering/Including/Excluding in maven-war-plugin is for web resources. For main resources use maven-resources-plugin. Put something like below into your profile. To include files from your custom directory.

<profiles>   <profile>     <!-- ... -->     <build>      <resources>        <resource>          <directory>src/main/config/dev</directory>          <filtering>true</filtering>          <includes>            <include>hibernate.cfg.xml</include>            <include>log4j.properties</include>          </includes>        </resource>        <resource>          <directory>src/main/resources</directory>          <filtering>false</filtering>          <excludes>            <exclude>hibernate.cfg.xml</exclude>            <exclude>log4j.properties</exclude>          </excludes>        </resource>      </resources>    </build>     <!-- ... -->    </profile> </profiles> 

Note that here <filtering> refers to variable filtering in your resources.

Answers 2

You have missed 2 things here.

  1. you have not made the filtering to true. Because by default filtering is false. so you need to make it true under resources

      <webResources>     <resource>       <filtering>true</filtering>       <!--directory>src/main/webapp</directory-->       <directory>${configFolder}</directory>       <includes>         <include>log4j.properties</include>         <include>hibernate.cfg.xml</include>         <!-- include any other file types you want to filter -->       </includes>     </resource>   </webResources> 

    Resource Link:

Another thing is,

  1. By using targetPath, you override the default destination directory to /WEB-INF/classes/. But for fulfilling your purpose to take your files in a specific directory, it must not be done. So remove it on that case.

remove it <targetPath>/WEB-INF/classes/</targetPath>

remove this portion from your pom.xml

Related Link:

I hope it will help you to solve your issue.

For a full example, you can follow the tutorial

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment