Tag Archives: properties files

Maven – configuration for properties file with JAR

Table of contents

  1. Configuration requirements
  2. Create the property file
  3. Configure POM
  4. Load the property file from class path

Configuration requirements

The desired requirements for this post are the following:

  1. Output should be a JAR
  2. 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.
  3. 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:

  1. We create and place the properties file in src/main/resources
  2. To copy the properties file in the target directory upon build,  we add an include rule to the resources section.
  3. To create the JAR file, we use the maven-jar-plugin
    1. We should exclude properties files from the JAR build
    2. We should define the main class for the JAR so that it is executable
  4. We should copy the properties files from the resources directory to the target directory
  5. 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