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


