Changes from 3.4.0 to 3.5.0
---------------------------

** Improvement
    * [FELIX-5764] - Update to bnd version 3.5


Changes from 3.3.0 to 3.4.0
---------------------------

** Bug
    * [FELIX-5527] - Bundle plugin Embed-Dependency complains about class files in META-INF
    * [FELIX-5592] - Maven bundle plugin does not support Java 9 Multi-Release jars
    * [FELIX-5712] - Maven Bundle Plugin - Broken and non https links
    * [FELIX-5734] - The plugin generates wrong service requirements when using a jndi name in jpa

** Improvement
    * [FELIX-5760] - Update to bnd version 3.4


Changes from 3.2.0 to 3.3.0
---------------------------

** Bug
    * [FELIX-5579] - Bundle Plugin uses insecure maven-archiver 2.5
    * [FELIX-5582] - maven-bundle-plugin: Make sure Closeable resources are closed

** Improvement
    * [FELIX-5424] - Augment exported service metadata
    * [FELIX-5581] - Update to bndlib 3.3.0


Changes from 3.0.1 to 3.2.0
---------------------------

** Bug
    * [FELIX-5116] - Dump SCR component definitions broken

** Improvement
    * [FELIX-5149] - Update to bndlib 3.1.0
    * [FELIX-5253] - Update to bndlib 3.2.0

** New Feature
    * [FELIX-4009] - maven bundle plugin should be integrated directly with eclipse
    * [FELIX-5233] - New JPA analyser for the maven bundle plugin
    * [FELIX-5258] - Add a new MOJO which verifies the bundle integrity


Changes from 3.0.0 to 3.0.1
---------------------------

** Bug
    * [FELIX-5062] - maven-bundle-plugin includes tests dependencies in package analysis
    * [FELIX-5070] - Simple syntax for specifying embedded dependencies has broken

** Improvement
    * [FELIX-5073] - Option to create dependency-reduced-pom exists


Changes from 2.5.5 to 3.0.0
---------------------------

** Improvement
    * [FELIX-5047] - Disable bnd ScrPlugin by default
    * [FELIX-5030] - Do not require a pom.xml when Polyglot Maven is used
    * [FELIX-5029] - Update to bnd 3.0.0

Especially the update to bnd 3.0.0 brings many fixes and improvements,
including support for OSGi Enterprise R6 DS annotations and Metatype
annotations.

Changes from 2.5.4 to 2.5.5
---------------------------

** Bug
    * [FELIX-4882] - Correctly use Maven Plugin Tools Java 5 annotations instead of javadoc tags
    * [FELIX-4892] NPE in maven-bundle-plugin
    * [FELIX-4874] IllegalArgumentException: Invalid syntax for version: 0.1-SNAPSHOT
    * [FELIX-4956] Embed latest bndlib
    * [FELIX-3565] Embed-Transitive leaks transitive dependencies of excluded artifacts
    * [FELIX-4823] Filtering snapshots is failing if version qualifier contains more than "SNAPSHOT"
    * [FELIX-4691] Empty string value for property causes build failure

** Improvement
    * [FELIX-4809] More flexibility for selecting the comparison artifact
    * [FELIX-3994] Optional merging of duplicate manifest headers
    * [FELIX-3324] Allow maven-bundle-plugin:manifest to dump SCR component definitions generated by bnd


Changes from 2.5.3 to 2.5.4
---------------------------

** Bug
    * [FELIX-4556] - Maven Bundle Plugin fails with ArrayIndexOutOfBoundsException, "Invalid Class File" errors with Java 8 features
    * [FELIX-4659] - The maven bundle plugin incorrectly reports cardinality on service references in the generated generic requirements
    * [FELIX-4817] - Baseline plugin is not thread safe
    * [FELIX-4679] - Import package not generated for the classes used in throw clause in a private method.

** Improvement
    * [FELIX-4666] - The baseline goal should print out the resolved version used for comparison
    * [FELIX-4824] - Add support for prepending instructions


Changes from 2.5.2 to 2.5.3
---------------------------

** Bug
    * [FELIX-4619] - Debug output of project properties


Changes from 2.5.0 to 2.5.2
---------------------------

** Bug
    * [FELIX-4574] - The maven-bundle-plugin only generates Provide-/Require-Capabilities for SCR if version is 1.1.0
    * [FELIX-4576] - Bad Require-Capability generation when the SCR target filter has no parentheses

** Improvement
    * [FELIX-4596] - Passing configuration values to the maven-bundle-plugin

** New Feature
    * [FELIX-4591] - add the ability to specify the classifier in the new baseline configuration of the plugin.


Changes from 2.4.0 to 2.5.0
---------------------------

** Improvement
    * [FELIX-3381] - Support for {maven-test-resources} and {maven-test-sources} placeholders
    * [FELIX-4205] - "null" Bundle-Activator causes bundle to fail
    * [FELIX-4518] - Provide a way to disable some plugins
    * [FELIX-4539] - Update to Bndlib 2.3.0

** New Feature
    * [FELIX-3462] - Nicer Manifest formatting
    * [FELIX-4512] - Add a new Mojo to invoke the BND Baseline tool
    * [FELIX-4517] - Generate generic capabilities and requirements for services from blueprint and scr descriptors

Changes from 2.3.7 to 2.4.0
---------------------------

** Bug
    * [FELIX-3293] - Exception while creating empty fragment bundles with version 2.3.6
    * [FELIX-3349] - wrong bundle manifest contents in some cases
    * [FELIX-3352] - Maven Bundle Plugin ignores resource properties configured inside <filters> section
    * [FELIX-3407] - Imports are missed for generics
    * [FELIX-3497] - Wrong artifact type attached as a secondary artifact when project packaging is set to "pom"
    * [FELIX-3582] - finalName not properly populated in maven-bundle-plugin with buildnumber-maven-plugin
    * [FELIX-3585] - Dependencies with classes or resources in the default package cannot be embedded
    * [FELIX-3601] - Incorrect namespace in component XML for DS Annotations
    * [FELIX-3619] - "IOException: Failed to delete repository.xml while trying to rename" in maven-bundle-plugin
    * [FELIX-3630] - Packages exported by bundle are (re)-imported with incorrect version
    * [FELIX-3638] - Missing package import for annotation default value
    * [FELIX-3772] - maven-bundle-plugin does not scan blueprint in workspace outside default location
    * [FELIX-3973] - Exclusion from {local-packages} doesn't work anymore
    * [FELIX-4005] - Maven Bundle Plugin fails with ArrayIndexOutOfBoundsException, "Invalid Class File" errors with Java 8 features
    * [FELIX-4017] - @ProviderType does not work (bnd "provide:=true" annotation?)

** Improvement
    * [FELIX-3277] - Support BND Service Component generation
    * [FELIX-3602] - The bundle plugin should generate the blueprint header with the file locations

** Wish
    * [FELIX-4067] - Old BND used causes problems during annotations processing

Changes from 2.3.6 to 2.3.7
---------------------------

** Bug
    * [FELIX-3347] - Upper-case environment variables end up in final manifest
    * [FELIX-3310] - [patch] maven-bundle-plugin build fails with maven3 (manageArtifactSystemPath is missing)
    * [FELIX-3254] - manifest goal generates wrong Export-Package when Embed-Dependency

** Improvement
    * [FELIX-3300] - Avoid warning about superfluous export-package instructions for empty directories

** Task
    * [FELIX-3299] - Fix instable tests in BundlePluginTest

Changes from 2.3.5 to 2.3.6
---------------------------

** Bug
    * [FELIX-3031] - maven3 deployment fails where maven2 works
    * [FELIX-3037] - Plugin does not work with Java 5
    * [FELIX-3058] - maven-bundle-plugin 2.3.5 incompatible with maven-source-plugin (regression)
    * [FELIX-3073] - can't deploy snapshot bundle to remote OBR
    * [FELIX-3173] - Local OBR install failes when there is a space in the full path
    * [FELIX-3185] - Negative Embed-Dependency clauses aren't handled correctly
    * [FELIX-3188] - [PATCH] exception org.apache.maven.project.artifact.InvalidDependencyVersionException has already been caught
    * [FELIX-3206] - Restore the BND analyzer approach which creates a MANIFEST.MF based on the contents of the jar
    * [FELIX-3209] - Make sure the properties passed to BND only include string values
    * [FELIX-3222] - [PATCH] build fails with "unreported exception"
    * [FELIX-3238] - Unable to filter out classes from identical package in a dependency

** Improvement
    * [FELIX-2872] - Provide a way to have an easier to read manifest
    * [FELIX-3061] - improvements to Embed-Dependency logic to allow better m2e integration
    * [FELIX-3092] - Support relative paths in "urlTemplate" parameter of "bundle:index" goal in maven bundle plugin

** New Feature
    * [FELIX-3165] - Add an option to the manifest goal that will copy any BND generated resources to the target folder
    * [FELIX-3208] - Provide default value for sourcepath when using BND -sources=true
    * [FELIX-3210] - Maven bundle plugin remote-clean goal without user confirmation

Changes from 2.3.4 to 2.3.5
---------------------------

** Bug
    * [FELIX-1039] - Inconsistency packaging vs. type
    * [FELIX-1571] - Bundle-ClassPath without "." while using maven-bundle-plugin in a war project confuses the plugin
    * [FELIX-1734] - The _donotcopy is ignored
    * [FELIX-1985] - Error when Include-Resource instruction contains duplicate paths.
    * [FELIX-2346] - mvn bundle:clean removes all, even the existing resources
    * [FELIX-2427] - maven site crashes
    * [FELIX-2435] - <supportedProjectType> on a WAR file will switch the project to generate jar artifacts
    * [FELIX-2449] - Resource filtering does not use Maven properties specified on the mvn command line via -D command line switches
    * [FELIX-2656] - Maven-bundle-plugin identified as not thread-safe in Maven 3.0
    * [FELIX-2722] - With an empty  organization like this <organization/>, maven bundle plugin raises a NPE.
    * [FELIX-2765] - bundle plugin throw IllegalArgumentException while do the install
    * [FELIX-2819] - packageinfo files in src/main/java are ignored
    * [FELIX-2820] - Provide a default value when using <_wab/>
    * [FELIX-2884] - The multiplicity isn't taken into account by the maven bundle plugin and bundlerepository when generating the repository xml
    * [FELIX-2914] - Nullpointer exception on mvn install if the pom contains organization/url but not organization/name
    * [FELIX-2934] - Bundle-ClassPath contains "." despite using _wab instruction

** Improvement
    * [FELIX-1836] - Maven resource filtering support for obr.xml

** New Feature
    * [FELIX-3011] - Add a new goal to save the bnd instructions that would be passed onto bnd, to allow people to use other toolchains such as bndtools

** Task
    * [FELIX-344] - Generate standard maven documentation for the maven-bundle-plugin

Changes from 2.2.0 to 2.3.4
---------------------------

 * [2011-02-01] FELIX-2817: The maven-bundle-plugin manifest goal should honor the supportedProjectTypes configuration setting.
 * [2011-01-27] FELIX-2808: maven-bundle-plugin should scan for local packages by looking for *.class files instead of *.java so that all the JVM languages can be supported.
 * [2011-01-27] FELIX-2809: maven-bundle-plugin should automatically add "resolution:=optional" to imported packages that are in optional maven dependencies.
 * [2011-01-29] FELIX-2811: If <Private-Package>!*</Private-Package> is defined the all packages should be exported by {local-packages}
 * [2011-01-29] FELIX-2812: The <Embed-Dependency> filter can fail if your matching against multiple "*" artifact ids.

Changes from 2.1.0 to 2.2.0
---------------------------

 * [2010-11-17] FELIX-2701: Add {local-packages} macro, expands to local packages in <Export-Package> instruction
 * [2010-10-25] FELIX-2176: Update to latest bndlib (1.15.0)

Changes from 2.0.0 to 2.0.1
---------------------------

 * [2009-09-03] FELIX-1461: make local repository updates a bit more atomic
 * [2009-09-03] Temporary local bnd patch for Include-Resource bug on Windows
 * [2009-09-03] FELIX-1539: include additional source directories in local package calculation
 * [2009-09-03] FELIX-1439: add project organization name/url properties
 * [2009-09-03] FELIX-1501: use getProperty() instead of getProperties().getProperty()
 * [2009-09-03] FELIX-1552: add bnd support for blueprint and spring-dm declarations
 * [2009-09-03] FELIX-1148: apply local patch for MSHARED-101
 * [2009-09-03] FELIX-981: avoid spurious split package warnings
 * [2009-09-03] FELIX-1290: warn if Embed-Dependency doesn't match any dependencies
 * [2009-09-03] FELIX-1021: remove expression from classifier parameter (ie. same as jar plugin)
 * [2009-09-03] FELIX-1023: apply patch to add category information to OBR
 * [2009-09-03] Upgrade to bndlib 0.0.357
 * [2009-07-13] FELIX-1262: remove duplicate resource entries to avoid Bnd Tool error
 * [2009-04-24] FELIX-1054: when deploying a bundle, print computed uri on the console

Changes from 1.4.3 to 2.0.0
---------------------------

 * [2009-02-16] FELIX-807,FELIX-782,FELIX-660,FELIX-549,FELIX-546,FELIX-545: Use latest version of the Bnd Tool (0.0.311)
 * [2009-02-16] FELIX-941: store the generated default symbolicname in $(maven-symbolicname) property
 * [2009-02-16] FELIX-912: set default Export-Package based on local source files
 * [2009-02-16] FELIX-684: support filters in excludeDependencies, such as *;scope=runtime
 * [2009-02-16] FELIX-684: separate out dependency filtering code so we can re-use it when excluding
 * [2009-01-30] FELIX-806: pickup <archive> settings in bundleplugin configuration (otherwise fall back to the jarplugin settings) and enable support of the addMavenDescriptor setting
 * [2009-01-30] FELIX-850: local fix for MSHARED-86 (should use isFile instead of exists)
 * [2009-01-29] FELIX-899: update to latest editions of Bnd and Bindex
 * [2009-01-29] FELIX-899: first step, widen dependency resolution and pass everything except test dependencies onto BND
 * [2008-12-05] Additional debug to help with problem determination
 * [2008-12-03] FELIX-760: commit latest bindex code
 * [2008-12-03] FELIX-831,FELIX-677: update to version 0.0.295 of the Bnd tool
 * [2008-08-27] FELIX-699: set analyzer base before loading properties in manifest goal


Changes from 1.4.2 to 1.4.3
---------------------------

 * [2008-08-07] FELIX-661: maven bundle plugin does not close the accessed zip/jar streams

Changes from 1.4.1 to 1.4.2
---------------------------

 * [2008-08-03] FELIX-553: allow cleaning a remote OBR
 * [2008-08-03] FELIX-580: Allows maven-bunde-plugin to generate a repository file outide a maven repository with absolute url
 * [2008-07-09] FELIX-556: Filtering mechanims to <Embed-Dependency/>
 * [2008-07-08] FELIX-547: OBR portion of the plugin balks on singular version range of [1.0.0,1.0.0].
 * [2008-07-07] FELIX-620: manifest goal of maven-bundle-plugin ignores _include instruction
 * [2008-05-16] FELIX-560: bundle:install and bundle:deploy goals check artifact type is "bundle" instead of using the supportedProjectTypes list
 * [2008-05-16] FELIX-561: Use same level of Bnd in script generated by bundle:ant as in the bundleplugin itself

Changes from 1.4.0 to 1.4.1
---------------------------

 * [2008-04-30] FELIX-543: add switch to prevent classifier being appended to Bundle-Version
 * [2008-04-23] FELIX-541: allow repository.xml to reference to xsl file
 * [2008-04-23] FELIX-531: Allow the import package scope to be set for the bundleall goal in the maven-bundle-plugin
 * [2008-04-23] FELIX-523: Update bundleplugin to use BND 0.0.255
 * [2008-04-01] FELIX-526: Allow a mechanism to give preference to local resources over the ones from embedded jars
 * [2008-03-24] FELIX-519: maven-bundle-plugin should issue a WARNING for unsupported packaging types
 * [2008-03-16] FELIX-517: Replacement of {maven-dependencies} in Include-Resource and Bundle-ClassPath can strip Windows path separators
 * [2008-03-03] FELIX-505: maven-bundle-plugin:bundleall modifies dependencies that are already bundles

Changes from 1.2.1 to 1.4.0
---------------------------

 * [2008-02-20] FELIX-499: Enhance "excludeDependencies" configuration parameter to also support comma-separated list of artifactIds
 * [2008-02-20] FELIX-498: Enable javadoc deployment on OBR repository
 * [2008-02-19] FELIX-497: Genearated Source url is not a valid url
 * [2008-02-19] FELIX-493: maven-bundle-plugin bundle:install goal install too many artifact
 * [2008-02-19] FELIX-247: Add ant goal to maven-bundle-plugin which creates a build.xml and MANIFEST.MF with bundle headers
 * [2008-02-18] FELIX-492: Add support to classifier: enable bunlde:bundle goal to generate classified artifact
 * [2008-02-18] FELIX-491: Merge the maven-obr-plugin and the bundleplugin into a single plugin

Changes from 1.2.0 to 1.2.1
---------------------------

 * [2008-02-12] FELIX-477: BND: Versions with fourth section all numbers are truncated
 * [2008-02-06] FELIX-479: add supportedProjectTypes configuration option to install goal
 * [2008-02-02] FELIX-459: BND: allow customization of the "uses" clause in the generated Export-Package
 * [2008-01-30] FELIX-476: Improve default Export-Package (used when no Export-Package and Private-Package is set)
 * [2008-01-30] FELIX-462: Support removal of manifest headers added by the bundleplugin
 * [2008-01-30] FELIX-461: Ensure manifest goal creates same manifest as bundle goal when project packaging is "bundle"
 * [2008-01-29] FELIX-472: Embed-Dependency, Include-Resource and inline
 * [2008-01-29] FELIX-460: Remove "." from the Bundle-ClassPath when embedding dependencies in a bundle with no local classes
 * [2008-01-28] FELIX-457: remove PathFile class and use URIs instead
 * [2008-01-22] FELIX-458: BND: -split-package:=merge-first behaves like merge-last

Changes from 1.0.0 to 1.2.0
---------------------------

 * [2008-01-11] FELIX-455: need to use the Builder class instead of Analyzer, because it provides additional cleanup of version information
 * [2008-01-10] FELIX-451: remove Include-Resource header from final bundle manifest
 * [2008-01-10] FELIX-449: add 'excludeDependencies' option (disabled by default) to exclude all dependencies from the classpath passed to BND
 * [2008-01-09] FELIX-442: handle custom manifest sections and external manifest files
 * [2008-01-08] Update to bndlib 0.0.227 (disables spring xml parser by default)
 * [2007-12-27] FELIX-442: Add manifest entries from maven-jar-plugin configuration to final bundle
 * [2007-12-07] FELIX-433: add unpackBundle option that unpacks the bundle contents to the Maven output directory
 * [2007-11-18] FELIX-400: add resource code to properly handle Maven includes/excludes
 * [2007-11-01] Make Embed-StripGroup default to true, as it is much more useful than the current default
 * [2007-10-31] FELIX-417: fix project references
 * [2007-10-26] Better error messages (and detect difference between internal error and configuration error)
 * [2007-10-23] FELIX 406: fix Windows path entries in Bundle-ClassPath when embedding jars
 * [2007-10-22] FELIX-405: support custom obr repository filenames, such as foo.xml
 * [2007-10-21] FELIX-403: replace line-breaks with spaces when using Maven project description in Bundle manifest
 * [2007-10-19] FELIX-402: use correct manifest location when using reactor build
 * [2007-10-19] FELIX-400: fix array out of bounds exception when the resource directory is the same as the basedir
 * [2007-09-25] FELIX-360: various fixes to the bundleall goal
 * [2007-09-22] FELIX-370: OBR integration work
 * [2007-09-22] FELIX-306: be consistent and delegate all version mangling to BND library
 * [2007-09-21] FELIX-377: support -failok directive
 * [2007-09-21] FELIX-376: Support writing of manifest to the file system when using bundle goal
 * [2007-09-11] FELIX-352: provide informational error message when manifest goal is run before compile phase
 * [2007-08-26] FELIX-308: support embedding of artifacts with non-jar extension names
 * [2007-08-24] Workaround for MNG-1682 (incorrect extension used when installing to local repository)
 * [2007-08-23] FELIX-343: replace any instances of {maven-resources} in Include-Resource with the actual project's resource paths
 * [2007-08-23] FELIX-308: initial implementation to support embedding dependencies
 * [2007-08-22] FELIX-340: update classpath algorithm to match maven compilation classpath
 * [2007-08-14] FELIX-333: remove new-lines/form-feeds from property values.

Changes from 0.8.0-incubator to 1.0.0
-------------------------------------

* [2007-03-13] <Include-Resources> now supports JAR files in the class path,
  not just JAR files in the project directory.
* [2007-03-15] Fixed a bug in converting Maven version numbers to OSGi version
  numbers. (FELIX-256)
* [2007-03-28] Added support for using BND directives in the POM file.
  (FELIX-218)
* [2007-04-10] Added a recursive "bundleall" goal to generate OSGi bundles for
  all dependencies and a "manifest" goal to generate just the manifest.
  (FELIX-199)
* [2007-04-27] Modified the plugin so that it does not run on POM projects.
  (FELIX-269)
* [2007-05-17] Plugin now handles null property values better. (FELIX-281)
* [2007-05-20] Renamed project directory from maven-bundle-plugin to
  bundleplugin.
* [2007-05-20] Changed package naming.
* [2007-05-21] Improved handling of resource copying to copy the plugin's
  resources if specified or the standard Maven-specified resources. (FELIX-261)
* [2007-06-13] Factored out some common code. (FELIX-304)
* [2007-06-14] Enable output folder to be configured. (FELIX-305)
* [2007-07-05] Added support for overriding project type. (FELIX-309)
* [2007-07-09] Updated to BND version 0.0.160.
* [2007-07-11] Fix a possible NullPointerException in the manifest goal. (FELIX-326)

