tree 51e17a3a63b1c1f28989918cbf92eb8882a0b224
parent 0b9344b440af6b1803788ef7b2401b441a0857b2
author gurkerl83 <markus_gritsch@gmx.de> 1602978565 +0200
committer Andrew Gaul <andrew@gaul.org> 1603722660 +0900

Sync OSGi handling with Apache JClouds Project

This project, the lab version of Apache JCloud, share the exact build instructions as the primary Apache JCloud project with all its modules.
Apache JCloud is shifting its strategy in handling OSGi configuration. Instead of using the Maven Bundle Plugin, a wrapper of the BND plugin, the BND plugin gets used directly.
Remove the OSGi configuration from each module. The configuration gets served to the BND through dedicated configuration / bnd files.

Onboard bnd-configuration files, one per module

Change packaging structure of cloud-sigma regions

Move provider classes from implementation and test from org.jclouds.cloudsigma2 to the respective package, e.g., org.jclouds.cloudsigma2.hnl to avoid a collision by identical package name served from different bundles.

Adjust GSON handling

Instead of repacking GSON in the Apache JCloud on a package name level, only the OSGi Metadata gets changed. This means the original GSON packing stays intact.

Ignore bnd files

Disable broken unit test
