Changes in 1.9.6
----------------
** Bug
    * [FELIX-6204] - ClassScanner.scanSources should ignore module-info


Changes in 1.9.4
----------------
** Improvement
    * [FELIX-6122] - SCR Tooling: Update to ASM 7.1 for Java 11 compatibility


Changes in 1.9.2
----------------
** Bug
    * [FELIX-6023] - bnd scrplugin preserve sequence of classpath entries
    

Changes in 1.9.0
----------------
** Bug
    * [FELIX-5464] - java.lang.NullPointerException at org.apache.felix.scrplugin.helper.ClassScanner.processClass(ClassScanner.java:207)
    * [FELIX-5729] - NoSuchFieldError when @Reference referenceInterface type different than field type
    * [FELIX-5730] - Different separators in localization attribute
    * [FELIX-5771] - Metatype generation via bnd plugin creates incorrect file names
    

Changes from 1.7.2 to 1.8.0
---------------------------
** Bug
    * [FELIX-5700] - Metatype generation wrongly puts properties files into metatype directory


Changes from 1.7.2 to 1.7.0
---------------------------
** Bug
    * [FELIX-5466] - Adding Target Source URL may lead to NPE


Changes from 1.7.0 to 1.6.0
---------------------------
** Bug
    * [FELIX-5451] - Input/Output streams not properly closed in org.apache.felix.scr.generator
    * [FELIX-5452] - SCR bnd plugin fails when embedding jars with optional/excluded dependencies
    * [FELIX-5419] - SCR Bnd Plugin does not work with bnd-maven-plugin: org.apache.felix.scrplugin.SCRDescriptorException: Unable to load compiled class


Changes from 1.6.0 to 1.5.0
---------------------------
** Improvement
    * [FELIX-5373] - Improve failure message when enabling metatype and using no or private properties only
** Bug
    * [FELIX-5304] - SERVICE_PID property should not be created
    * [FELIX-5328] - NoClassDefFound not wrapped in the ClassScanner
    * [FELIX-5345] - Incorrect encoding in metatype props file


Changes from 1.5.0 to 1.4.0
---------------------------
** Improvement
	* [FELIX-5108] - scr bnd plugin: Add option to suppress writing log to filesystem
** Bug
    * [FELIX-5074] - Using org.apache.felix.scr.bnd together with maven-bundle-plugin leads to using the wrong bnd version


Changes from 1.4.0 to 1.3.0
---------------------------
** Improvement
    * [FELIX-4773] - Generated service component xml does not conform to XSD
** Bug
    * [FELIX-4836] - Bnd Scrplugin is called twice by BndTools
    * [FELIX-4861] - Metatype generation should fail if there is no configuration property
    * [FELIX-4622] - Regression: SCR spec version detection incorrect for activate method
    * [FELIX-4774] - Support for @Reference annotation with unbind method "-"


Changes from 1.3.0 to 1.1.0
---------------------------
** Improvement
    * [FELIX-4586] - A field must be volatile if methods are generated for a dynamic reference
** Bug
    * [FELIX-4567] - scr bnd plugin incompatible with maven-bundle-plugin 2.5.0
    * [FELIX-4296] - Cannot deactivate service interface detection in DS annotations
    * [FELIX-4587] - Update method is not verified


Changes from 1.1.0 to 1.0.0
----------------------------
** Improvement
    * [FELIX-4461] - Update to ASM 5 for Java 8 compatibility




