Apache Celix is an implementation of the OSGi specification adapted for C (C11) and C++ (C++14). It enables a dynamic, modular software architecture using bundles, services, and components.
Key Concepts
- Bundles: Deployment units (zip files) containing libraries and resources.
- Services: Function pointer structs (C) or abstract classes (C++) registered in a framework-wide registry.
- Components: Logic units managed by the Dependency Manager (DM) that handle service lifecycle (init, start, stop, deinit) declaratively.
- Containers: Executables created via add_celix_container that launch a framework instance with preconfigured bundles.
Assume no internet connection. Request confirmation before installing system packages.
# Initial configure build:
cmake \
-DCMAKE_FETCHCONTENT_FULLY_DISCONNECTED=ON \
-DENABLE_TESTING=ON \
-DRSA_JSON_RPC=ON \
-DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-G Ninja \
-S . -B build
# Initial configure build, if a download is needed:
cmake \
-DENABLE_TESTING=ON \
-DRSA_JSON_RPC=ON \
-DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-G Ninja \
-S . -B build
# Compile:
cmake --build build --parallelAfter building, run the tests for the components you changed. Run ctest from
the appropriate build subdirectory when possible.
For example, to test the shell bundles:
Scoped:
ctest --output-on-failure --test-dir build/<sub-dir>Full Suite:
ctest --output-on-failure --test-dir buildWith exception of documentation changes, always build and run the test before submitting changes.
- Line Coverage: New code must aim for >95% line coverage.
- Error Injection: Use or extend the Apache Celix error_injector libraries to inject errors in unit tests to ensure high code coverage.
- Refer to the development guide for the project's coding conventions.
- New files should be formatted with the project's
.clang-formatconfiguration.