Q: My test is not running and the console only tells me Main class aQute.launcher.Launcher could not be loaded. What could be the reason.

A: This is usually the case if you have a invalid run configuration. Try resolving you run config and resolve the issues here. Don’t forget to add the ${junit} and ${mockito} entries in the runbundles afterwards if you are using bnd 3.4 or older.


Q: How can I use @ProviderCapability and @RequireCapability Annotations?

A: Add the bundle biz.aQute.bnd.annotation to your bnd.bnd. It can be found in the latest release version in maven central. Note: These Annotations will move with R7 directly in the osgi spec and bundles and will be supported directly by bnd.

MongoDB Docker Compose setup with initial dump import

A while ago started making use of the practicality of docker composes for setting up environments for servers and clusters. One of the biggest advantages things I found in such a setup, is the reproducibility of an environment for production, staging or development systems without much effort, together  with the easy automation of build and deployment processes without a lot of script writing.

One case we didn’t know how to address properly was the way to provide initial data dumps for the environments without exposing the mongo port to the outside world and/or a lot of manual intervention. Lately we found an easy solution we like to share.

version: '2'


        image: mongo:3.2
        entrypoint: [ "/usr/bin/mongod", "--journal", "--smallfiles", "--rest" ]
        restart: always
            - mongo

        image: mongo:3.2
            - ./dump:/dump
        entrypoint: ["mongorestore", "--host", "mongo-db", "/dump"]
            - mongo


The easy setup utilises the ability of docker-compose to overwrite the default entry point of a container. Thus all the data in the mounted dump directory will be imported to the mongodb container on startup.

This approach can be taken further if a script is placed in another mounted directory and started instead. This could be used to e.g. delete the dump afterwards to prevent a reimport attempt if you don’t want to restart the service all the time or trigger some other actions after the dump is imported.

Using P2 Repositories with Bndtools

Bndtools support multiple types of repositories to grep artifacts from. For a while now P2 Repositories are supported as well, but information on how to add them are sparse and it is not obvious if you are new to bnd.

What to do:

Open the build.bnd in the cnf Project and switch to the source view. To add a repository add an entry like this:

-plugin.3.mars: \
 aQute.bnd.repository.p2.provider.P2Repository; \
 url = http://download.eclipse.org/releases/mars; \
 name = mars

My colleague urged me to give the following WARNING after he tried it himself: This example will cause bndtools do download the whole repository with all the content. Thus this may take a while!

We hope this might be helpful to you as well.

Hallo World!

Welcome to the Data In Motion Tech Blog. Here we will present code snippets and tricks regarding the topics Eclipse, OSGi, Gyrex, E4 and Java that hopefully will be interesting to you, too.

Through our daily work, we stumble upon a lot of interesting technologies and develop heaps of code worth sharing. Thus we have decided to spread our wisdom, in the hope to find other interested souls.

Happy reading,

your Data In Motion Development Team.