Using the properties tag within maven profiles
Asked Answered
M

1

16

I am in reference to "Maven: The Complete Reference" and especially the section regarding profiles which documents the use of a <properties... tag within the <profile... tag here: see here

 <profile>
            <id>development</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <property>
                    <name>environment.type</name>
                    <value>dev</value>
                </property>
            </activation>
            <properties>
                <database.driverClassName>com.mysql.jdbc.Driver</database.driverClassName>
                <database.url>
                    jdbc:mysql://localhost:3306/app_dev
                </database.url>
                <database.user>development_user</database.user>
                <database.password>development_password</database.password>
            </properties>
        </profile>

What I am not sure about is what happens when the mvn install -Denvironment.type=dev command is run:

  • Will this create a .properties file?
  • If not how and where will tomcat (for instance) read the individual properties when the app is tested in dev?
Malefactor answered 22/8, 2012 at 8:3 Comment(1)
Just been trying to follow the chain here through maven and spring and this is exactly the question and answer I needed! Nice one!Mercurialize
B
26

Will this create a .properties file?

No, it won't. This would set the properties used by maven. This is, with mvn install -Denvironment.type=development maven would use the value 'development_user' for the variable 'database.user' (that you can use as ${database.user} in poms and filtered resources).

If not how and where will tomcat (for instance) read the individual properties when the app is tested in dev?

The thing is to tell maven to filter (and modify) the resources that you want to customize depending on the profile (properties.files).

So, first you have to say maven to filter the resources:

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

Then modify your properties files to use maven variables. For example, your db properties file would look like this:

database.driverClassName=${database.driverClassName}
database.url=${database.url}
#...
Brabble answered 22/8, 2012 at 8:37 Comment(1)
I found the docs helpful after reading this answer - it seems that 'filtering' basically means maven goes through and replaces ${somename} with it's values on build in any file. You can see this in the build output. Great answer - really filled in the gaps for me.Mercurialize

© 2022 - 2024 — McMap. All rights reserved.