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


Changes from 1.24.0 to 1.23.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


Changes from 1.23.0 to 1.22.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.22.0 to 1.21.0
-----------------------------
** Bug
    * [FELIX-4999] - Project resources are messed up when outputDirectory configuration present on windows
    * [FELIX-5118] - Exception when running on jdk9-ea


Changes from 1.21.0 to 1.20.0
-----------------------------
** Improvement
    * [FELIX-4773] - Generated service component xml does not conform to XSD
** Bug 
    * [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.20.0 to 1.19.0
-----------------------------
** Bug
    * [FELIX-4595] - Passing configuration to the maven-bundle-plugin does not always work


Changes from 1.19.0 to 1.17.0
-----------------------------
** Improvement
    * [FELIX-4586] - A field must be volatile if methods are generated for a dynamic reference
    * [FELIX-4530] - Revisit setting the default output to target/classes
** Bug
    * [FELIX-4296] - Cannot deactivate service interface detection in DS annotations
    * [FELIX-4587] - Update method is not verified


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


Changes from 1.16.0 to 1.15.0
-----------------------------
** Improvement
    * [FELIX-4378] - Generate a metatype properties file if label/description are missing on @Component or @Property
** Bug
    * [FELIX-4379] - Properties, references and services from inherited classes are only used if the class has the component annotation
    * [FELIX-4383] - Metatype generation should use component name (and not classname)
    * [FELIX-4441] - The default value is not escaped correctly.
    * [FELIX-4442] - Lifecycle methods with wrong arguments should be treated as an error


Changes from 1.15.0 to 1.14.0
-----------------------------
** Improvements
    * [FELIX-4241] - Change default output directory for SCR annotations to ${project.build.directory}/classes 
    * [FELIX-4249] - Make the default error location 1,1 instead of 0,0
** Bug
    * [FELIX-4192] - SCR Generator fails with a NPE in case a class level Reference doesn't define a referenceInterface
    * [FELIX-4010] - SCR Plugin aborts when scanning a Java 8 class file
    * [FELIX-4246] - SCR and Metatype descriptor files get deleted on subsequent (incremental) eclipse build


Changes from 1.14.0 to 1.13.0
-----------------------------
** Improvement
    * [FELIX-4101] - Create metatype.properties file when description and label are inlined
    * [FELIX-4126] - Discontinue creation of single XML descriptor files 
    * [FELIX-4170] - Deprecate inheritance of component descriptors


Changes from 1.13.0 to 1.12.0
-----------------------------
** Bug
    * [FELIX-4049] - SCR-Plugin creates invalid manifest-header on incremental-build (eclipse-IDE-integration)
    * [FELIX-4058] - PropertyType password has a wrong type (passwort)


Changes from 1.12.0 to 1.11.0
-----------------------------
** Improvement
    * [FELIX-4033] - Issue warning messages for redundant SCR annotation combinations and an error for declaring the service.id property
    * [FELIX-4035] - Issue warning messages when metatype is be created, but no properties are defined
** Bug
    * [FELIX-4030] - Generated metatype file contains all metatype infos
    * [FELIX-4023] - SCR-Plugin not working reliably in m2e 1.3.1 
    * [FELIX-3542] - Escape property values used as Metatype default values


Changes from 1.11.0 to 1.10.0
----------------------------
** Improvement
    * [FELIX-3943] - Maven Plugin should require latest SCR annotations 
** Task
    * [FELIX-3942] - IT Tests should use newer version of annotations 
** Bug
    * [FELIX-3917] - bind/unbind methods are not generated
    * [FELIX-3941] - Dependency to annotations should not be in the plugin

 
Changes from 1.10.0 to 1.9.0
----------------------------
** Improvement
    * [FELIX-3794] - Use DS specification version per component
    * [FELIX-3636] - Using @Service without @Component should log a warning
    * [FELIX-2929] - Read @Property from interfaces of types annotated with @Component
    * [FELIX-3169] - Add support for new PASSWORD attribute type of Metatype service
    * [FELIX-3886] - Improve error message for empty *.java-File

** Task
    * [FELIX-3867] - Drop support for JDK 1.4 completely

** Bug
    * [FELIX-3815] - Maven SCR Plugin does not correctly set specVersion to 1.1 if bind method with two parameters are used (OSGi Comp 4.2 $112.3.1)
    * [FELIX-3858] - Service descriptor written in wrong encoding
    * [FELIX-3232] - SCR annotations @Activate @Deactivate @Modified in outer classes also affect nested classes, annotations in nested classes are ignored 


Changes from 1.9.0 to 1.8.0
---------------------------
** Improvement
    * [FELIX-3358] - Enhance the maven-scr-plugin to be compatible with recent Maven/Eclipse integrations
    * [FELIX-3642] - Change default for generating descriptor files to generate single file for each component
    * [FELIX-3641] - Option to generate separate descriptor files
    * [FELIX-3643] - Use BuildContext for scanning changed files
    * [FELIX-3640] - Ignore maven-scr-plugin executions in Eclipse
    * [FELIX-2892] - Get SCR annotations to work with Scala

** Bug
    * [FELIX-3788] - specVersion incorrectly determined, depends on class order
    * [FELIX-3568] - java.lang.VerifyError from bundles compiled with maven-scr-plugin (java 7)
    * [FELIX-3739] - scr-plugin: "Annotated method {0} not found"
    * [FELIX-3793] - Property of type Character must use unicode value
    * [FELIX-3653] - Define the "@Reference" annotation on class level without a "referenceInterface" parameter.

    
Changes from 1.7.4 to 1.8.0
---------------------------

** Task
    * [FELIX-3225] - Drop javadoc annotation support
    * [FELIX-3552] - Implement new features of DS 1.2
    * [FELIX-3550] - Reimplement the SCR Generator

** Bug
    * [FELIX-3571] - "Comparison method violates general contract!" error in maven-scr-plugin
    * [FELIX-3555] - Maven SCR Plugin shoudn't attempt to run on modules of type POM
    * [FELIX-3269] - @Property is not properly parsed.
    * [FELIX-3189] - Mixing full-qualified Reference annotations and imported one results in no References exported to seviceComponents.xml
    * [FELIX-3606] - SCR Plugin: build failure on wildcard imports (e.g. java.util.*)
    * [FELIX-3234] - @Property annotation raises exceptions on longValue=0L use 

** Improvement
    * [FELIX-2689] - Upgrade Descriptor generator to new parent POM and adapt legal files


Changes from 1.7.2 to 1.7.4
---------------------------

** Bug
    * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
    * [FELIX-3117] - NullPointerException when not implementing interface that is defined with @Service
    * [FELIX-3070} - SCR Plugin and dependencies with classifier cause issue depending on the order of dependency in pom.xml
    * [FELIX-3136] - Endless loop: JavaClassDescriptorManager.getJavaClassDescription()
    * [FELIX-3113] - NPE in multi-module Maven project


** Improvement
    * [FELIX-3066] - Add support for source directory include filter via plugin configuration


Changes from 1.7.0 to 1.7.2
---------------------------

** Bug
    * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
    * [FELIX-2978] - Lookup reference policy does not work for inherited components
    * [FELIX-2945] - SCR plugin: Parsing of "options" for property tag broken for java annotations
    * [FELIX-2906] - @Property(cardinality=Integer.MAX_Int, ...) causes java.lang.NumberFormatException
    * [FELIX-2878] - scr- and bundle-plugin in multimodule project fails with goal "test"

** Improvement
    * [FELIX-2939] - Maven SCR Plugin is not (marked as) thread-safe for parallel builds
    * [FELIX-2492] - scr plugin: using src annotations causes NoClassDefFoundError and other errors
    * [FELIX-2908] - Use same mechanism to get single annotation values as for multiple annotation values


Changes from 1.6.0 to 1.7.0
---------------------------

** Bug
    * [FELIX-2704] - @Property(cardinality=Integer.MAX_Int, ...) causes java.lang.NumberFormatException
    * [FELIX-2835] - SCR plugin: Parsing of "options" for property tag broken for javadoc annotations
    * [FELIX-2777] - MavenJavaClassDescriptorManager ignores dependencies with system scope
    * [FELIX-2770] - maven-scr-plugin 1.6.0 incompatible with <packaging>pom</packaging> projects
    * [FELIX-2731] - NPE while scanning sources with QDox
    * [FELIX-2681] - NPE in assertMinScrAnnotationArtifactVersion when checking min. version of annotations dependency
    * [FELIX-2876] - <reference> element not generated when name is missing

** Improvement
    * [FELIX-2853] - Deprecate javadoc tags
    * [FELIX-2753] - Support array of classes for @Service annotation
    * [FELIX-2874] - Add new scopes to SlingFilter annotation and use new property names
    * [FELIX-2838] - Allow classes to be specifed as values for the @Property annotation
    * [FELIX-2863] - Warnings and error messages contain @scr.* if annotations are used
    * [FELIX-2690] - Add changelog.txt to SCR/Metatype generation modules


