Reactor Project
Starting from 3.0, Reactor is now organized into multiple projects:
A set of compatible versions for all these projects is curated under a BOM ("Bill of Material").
Using the BOM with Maven
In Maven, you need to import the bom first:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-bom</artifactId>
<version>Bismuth-SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Notice we use the <dependencyManagement>
section and the import
scope.
Next, add your dependencies to the relevant reactor projects as usual, except without a <version>
:
<dependencies>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Using the BOM with Gradle
Gradle has no core support for Maven BOMs, but you can use Spring's gradle-dependency-management
plugin.
First, apply the plugin from Gradle Plugin Portal (check and change the version if a new one has been released):
plugins {
id "io.spring.dependency-management" version "1.0.1.RELEASE"
}
Then use it to import the BOM:
dependencyManagement {
imports {
mavenBom "io.projectreactor:reactor-bom:Bismuth-SR9"
}
}
Then add a dependency to your project without a version number:
dependencies {
compile 'io.projectreactor:reactor-core'
}
BOM Versioning Scheme
The BOM can be imported in Maven, which will provide a set of default artifact versions to use whenever the corresponding dependency is added to a pom without an explicitly provided version.
As the different artifacts versions are not necessarily aligned, the BOM represents a release train with a codename-based versioning scheme: the usual MAJOR.MINOR numbers are replaced by a chemical name from the Periodic Table of Elements, in growing alphabetical order.
The first stable release is simply suffixed with -RELEASE
, but the equivalent of patch releases are also possible as "Service Releases", appending the suffix -SR
followed by the number of the service release (eg. -SR1
, -SR2
).
So far, the release trains are named:
Aluminium
for the3.0.x
generation of Reactor-Core (💡 )Bismuth
for the3.1.x
generation (💡 )Californium
for the3.2.x
generation (💡 )
Enrolling
Join the initiative, fork, discuss and PR anytime. Roadmap is collaborative and we do enjoy new ideas, simplifications, doc, feedback, and, did we mention feedback already ;) ? As any other open source project, you are the hero, Reactor is only useful because of you and we can't wait to see your pull request mate !
Documentation
Community / Support
Detail of Projects
Reactor Core
Reactive foundations for apps and frameworks and reactive extensions inspired API with Mono (1 element) and Flux (n elements) types
- API documentation: /docs/core/release/api
Reactor Netty
TCP and HTTP client and server.
- API documentation: /docs/netty/release/api
Reactor Addons
Extra projects adding features to reactor:
reactor-adapter
: adapt to/from various libraries, mainly RxJava 2.- API documentation: /docs/adapter/release/api
reactor-extra
: Retry utils, Math utils, ...- API documentation: /docs/test/release/api
reactor-logback
:logback
adapter for Flux/Monolog()
feature.
Snapshot Artifacts
While Stable Releases are synchronized with Maven Central, fresh snapshot and milestone artifacts are provided in the repo.spring.io repositories.
To add this repo to your Maven build, add it to the <repositories>
section like the following:
<repositories>
<repository>
<id>spring-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repositories>
To add it to your Gradle build, use the repositories
configuration like this:
repositories {
maven { url 'http://repo.spring.io/libs-snapshot' }
mavenCentral()
}
You should then be able to import a BUILD-SNAPSHOT
version of the BOM, like Californium-BUILD-SNAPSHOT
.
Reactive Streams Commons
In a continuous mission to design the most efficient concurrency operators for Reactive Streams, a common effort -codename Reactive Streams Commons- has begun. Reactor is fully aligned with RSC design and is directly inlining RSC within its stable API contract scoped under reactor-core. Reactive Streams Commons is a research effort shared with everyone and is demanding of efficient stream processing challengers, therefore it is naturally decoupled of any framework noise.
Miscellaneous
Please note that Bismuth-SR1
and Bismuth-SR2
contain a bad version entry for reactor-extra
.
Avoid using this BOM if possible, in favor of Bismuth-SR3
(although things should be
fine for now if you don't depend on reactor-extra).
Sponsored by Pivotal