bnd - one tool to bnd them all!

- # What is bnd?

  > “If you want to teach people a new way of thinking, don't bother trying to teach them. Instead, give them a tool, the use of which will lead to new ways of thinking.”
  > ― R. Buckminster Fuller

  bnd is the engine behind a number of popular software development tools that support OSGi. It can be found in several maven plugins, ant, gradle, and of course Eclipse (bndtools). It actively seeks other build tool vendors to use bnd to improve the quality of the generated OSGi metadata.

  bnd actually consists of 2 major parts, one part is really good in creating a JAR with OSGi meta data based on instructions and the information in the class files. Over time bnd has collected hundreds of heuristics that provide for good bundles. This part is therefore often used in build tools like maven or gradle that already generate JARs. They mainly use the manifest generation features of bnd.

  The other part is a IDE/build tool independent model of a workspace with projects. This was the result of the frustration that certain things could be done very well in Eclipse but that other things are best done in a command line tool. Since IDEs are incremental and very event driven, command line tools tend to run everything from start to end. What was needed was an independent model that could work with Eclipse, maven, ant, gradle, and hopefully one day Intellij.

  So to use bnd, look at the the descriptions of the tools that include bnd. Then when you want to find out what a certain command does, or how to call a macro, then use this manual.

- # How to get started?

- # Table of contents

  1. Introduction
  2. How to install bnd
  3. Guided Tour
  4. Guided Tour Workspace & Projects
  5. Concepts
  6. Best practices
  7. Build
  8. Project Setup
  9. Generating JARs
  10. Versioning
  11. Baselining
  12. Service Components
  13. Metatype
  14. Contracts
  15. Bundle Annotations
  16. Accessor Properties
  17. SPI Annotations
  18. Resolving Dependencies
  19. Launching
  20. Startlevels
  21. Testing
  22. Testing with Launchpad
  23. Packaging Applications
  24. JPMS Libraries
  25. Wrapping Libraries to OSGi Bundles
  26. Generating Documentation
  27. Commands
  28. For Developers
  29. Tools bound to bnd
  30. Headers
  31. Instruction Reference
  32. Instruction Index
  33. Macro Reference
  34. Macro Index
  35. Plugins
  36. Settings
  37. Errors
  38. Warnings
  39. Frequently Asked Questions