Apache HttpComponents Stylecheck Plugin Configuration
Copyright 2013-2017 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
