Table of contents
- Configuration requirements
- Create the property file
- Configure POM
- Load the property file from class path
Configuration requirements
The desired requirements for this post are the following:
- Output should be a JAR
- There must exist at least one property file (e.g. config.properties). All property files should not be placed inside the JAR, but should be easily accessible by the user.
- It should be easy to add more properties files without changing pom.xml
To address the requirements above we have to do the following steps:
- We create and place the properties file in src/main/resources
- To copy the properties file in the target directory upon build, we add an include rule to the resources section.
- To create the JAR file, we use the maven-jar-plugin
- We should exclude properties files from the JAR build
- We should define the main class for the JAR so that it is executable
- We should copy the properties files from the resources directory to the target directory
- We should change the code to read the properties file from the classpath
Create the property file
Create the property file and place it in src/main/resources
# Server Configuration
server.port=8080
server.hostname=myserver.com
server.max_connections=100
Configure POM
We need to configure POM to create JAR files and include the property file in the output but exclude it in the JAR:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <executions> <execution> <id>copy-resources</id> <phase>install</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target</outputDirectory> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <!-- Build an executable JAR --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <excludes> <exclude>**/*.properties</exclude> </excludes> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.blabla.MyMainClass</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
Load the property file from class path
Lastly, to load the properties, we can use the following code:
Properties prop = new Properties(); prop.load(getClass().getResourceAsStream("/config.properties"));
What about JAR within Intellij?
A maven project in Intellij requires additional steps.
For more information read this post