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.
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,
- 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
0 comments:
Post a Comment