Search code examples
javamavenmaven-war-plugin

Error loading property file (plugins:maven-war-plugin:2.4:war:default-war:package)


I would like to configure a properties files depending on a profile, either dev or prod, however the location of the properties file is not correctly constructed. I have found answers to similar issues on SO but none of the those answers have helped resolve this issue.

The error I receive is as follows:

Error loading property file 'E:\Development\CodeSource\GitHub\myproject\profiles\dev\mongo.properties' (org.apache.maven.plugins:maven-war-plugin:2.4:war:default-war:package)

The actual location of the properties file is:

E:\Development\CodeSource\GitHub\myproject\src\main\resources\profiles\dev\mongo.properties

So I set the resources location as follows:

<resources>
    <resource>
        <filtering>true</filtering>
        <directory>src/main/resources</directory>
    </resource>
</resources>

Nevertheless it still does not find the properties file.

Here is the entire pom file:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>abc.myproject</groupId>
<artifactId>myartifact</artifactId>
<packaging>war</packaging>
<version>0.1.0-SNAPSHOT</version>

<name>projectname</name>
<description>Site Description</description>
<url>http://www.myproject.abc</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <maven-war-plugin.version>2.4</maven-war-plugin.version>
    <tomcat-deploy-path>output</tomcat-deploy-path>
</properties>

<dependencies>
    // various dependencies
</dependencies>

<build>
    <finalName>v${project.artifactId}#${project.version}</finalName>
    <filters>
        <filter>profiles/${build.profile.id}/mongo.properties</filter>
    </filters>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>${maven-war-plugin.version}</version>
            <configuration>
                <outputDirectory>${tomcat-deploy-path}</outputDirectory>
                <failOnMissingWebXml>true</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
    </plugins>
</build>


<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <build.profile.id>dev</build.profile.id>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <build.profile.id>prod</build.profile.id>
        </properties>
    </profile>
</profiles>

</project>

I am using Eclipse.


Solution

  • The path to the filter files is relative to the project root, not to src/main/resources. As such, you need to configure it like so:

    <filters>
        <filter>src/main/resources/profiles/${build.profile.id}/mongo.properties</filter>
    </filters>