RxJava是 ReactiveX 在JVM上的一个实现,ReactiveX使用Observable序列组合异步和基于事件的程序。更多关于ReactiveX的资料,可以查看 ReactiveX 介绍 页面。
RxJava介绍
RxJava 是轻量级的
RxJava尽力做到非常轻巧。它仅关注Observable的抽象和与之相关的高层函数,实现为一个单独的JAR文件。
RxJava 是一个多语言实现
RxJava 支持Java 6或者更新的版本,以及其它的JVM语言如 Groovy, Clojure, JRuby, Kotlin 和 Scala。RxJava 可用于更多的语言环境,而不仅仅是Java和Scala,而且它致力于尊重每一种JVM语言的习惯。
RxJava 第三方库
下面是可与RxJava协作的第三方库:
- Hystrix - 用于分布式系统的一个延时和容错处理框架
- Camel RX - 一个用于Apache Camel 的 RxJava 兼容层
- rxjava-http-tail - 让你可以跟踪HTTP日志,就像使用
tail -f
一样 - mod-rxvertx - Extension for VertX - 使用 RxJava 封装的VertX库
- rxjava-jdbc - 使用RxJava流式处理JDBC连接,还支持语句的函数式组合
- rtree - 使用RxJava实现的一个纯内存的可变的R-tree和R*-tree
使用指南
你可以在Maven Central http://search.maven.org 找到用于Maven, Ivy, Gradle, SBT和其它构建工具需要的二进制文件和依赖信息.
Maven示例:
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.0.10</version>
</dependency>
Ivy示例:
<dependency org="io.reactivex" name="rxjava" rev="1.0.10" />
SBT示例:
libraryDependencies += "com.netflix.rxjava" % "rxjava-scala" % "1.0.10"
Gradle示例:
compile 'io.reactivex:rxjava:1.0.10'
如果你没有使用构建系统,想直接下载JAR文件的话可以在这里找到:
https://repo1.maven.org/maven2/io/reactivex/
编译构建
检出和构建RxJava的源码,使用以下命令:
$ git clone git@github.com:ReactiveX/RxJava.git
$ cd RxJava/
$ ./gradlew build
要执行一个完整的构建,使用这个命令:
$ ./gradlew clean build
构建命令的输出大概是这样的:
$ ./gradlew build
:rxjava:compileJava
:rxjava:processResources UP-TO-DATE
:rxjava:classes
:rxjava:jar
:rxjava:sourcesJar
:rxjava:signArchives SKIPPED
:rxjava:assemble
:rxjava:licenseMain UP-TO-DATE
:rxjava:licenseTest UP-TO-DATE
:rxjava:compileTestJava
:rxjava:processTestResources UP-TO-DATE
:rxjava:testClasses
:rxjava:test
:rxjava:check
:rxjava:build
BUILD SUCCESSFUL
Total time: 30.758 secs
执行完整的构建的话,你会看到单元测试的执行,输出类似于这样:
> Building > :rxjava:test > 91 tests completed
故障排除
有一位开发者上报了下面这个错误:
Could not resolve all dependencies for configuration ‘rxjava-scala:provided’
他在从.gradle/caches
和.m2/repository/org/scala-lang/
移除了旧版本的 scala-library
之后解决了这个问题,然后执行了一次完整构建。(查看详细信息)
在构建RxJava时你可能会遇到下面的错误:
Failed to apply plugin [id ‘java’]
Could not generate a proxy class for class nebula.core.NamedContainerProperOrder.
这是JVM的问题,详细信息可以参考 GROOVY-6951 。如果遇到这个问题,可以在构建RxJava之前执行 export GRADLE_OPTS=-noverify
,或者升级你机器上的JDK。