Skip to content
Simple template processing Gradle plugin for managing project configurations
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.editorconfig
.gitignore
LICENSE
README.md
build.gradle

README.md

info.gconfig

This is simple template processing Gradle plugin. Useful for managing project configurations.

Here is a brief explanation of this plugin but documentation and examples are available at gconfig.info

In almost every software development project there is a list of configurations (or settings) that are required for normal project functioning. This could be database connection properties, location of some templates, API keys for third-party services or even just application version.

In most cases, list of these settings is same for all environments and only values of these settings vary from environment to environment. For example, database host for QA environment may look like qa.example.com but for UAT environment it may look like uat.example.com.

Usually, every software developer is responsible for updating these configurations for a needed environment. And, unfortunately, all developers make same mistake - forget to replace required configuration and, as a result, SQL scripts are applied on wrong database or some production API keys are used instead of testing API keys.

This plugin is created to minimize the chances of such mistakes.

Take a look at following example.

Here is the example of context.xml for setting up DataSource for Apache Tomcat:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource name="jdbc/ExampleDB"
    url="jdbc:mysql://example.com:3306/db_name"
    username="root"
    password="root_password"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.cj.jdbc.Driver"
    maxWaitMillis="5000"
    testOnBorrow="true"
    validationQuery="SELECT 1"/>
</Context>

In most cases, this config will be in same shape and only url, username та password will be different for each environment.

We can replace hardcoded values with template tokens:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource name="jdbc/ExampleDB"
    url="jdbc:mysql://%{DB_HOST}:%{DB_PORT}/db_name"
    username="%{DB_USER_NAME}"
    password="%{DB_USER_PASSWORD}"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.cj.jdbc.Driver"
    maxWaitMillis="5000"
    testOnBorrow="true"
    validationQuery="SELECT 1"/>
</Context>

Create generic configs template dbconfig:

DB_HOST=
DB_PORT=
DB_USER_NAME=
DB_USER_PASS=

Make a copy of generic configs template dbconfig.local and fill values based on actual environment values:

DB_HOST=localhost
DB_PORT=3306
DB_USER_NAME=root
DB_USER_PASS=password

Add following to build.gradle:

plugins {
  id 'info.gconfig' version '1.0.1'
}

gconfig {
  configs = files ('dbconfig')
  environment = 'local'
}

And execute processConfigs task. At the end you'll get ready-to-use context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource name="jdbc/ExampleDB"
    url="jdbc:mysql://localhost:3306/db_name"
    username="root"
    password="password"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.cj.jdbc.Driver"
    maxWaitMillis="5000"
    testOnBorrow="true"
    validationQuery="SELECT 1"/>
</Context>

You got the idea. For details, please check gconfig.info

You can’t perform that action at this time.