与RxKotlinFX堆栈Kotlin给不能访问类错误

当我在我的POM文件中使用以下依赖项时:

<properties> <rxkotlinfx.version>2.2.0</rxkotlinfx.version> <rxkotlin.version>2.1.0</rxkotlin.version> <kotlin.version>1.1.51</kotlin.version> <tornadofx.version>1.7.12</tornadofx.version> </properties> <dependencies> <dependency> <groupId>com.github.thomasnield</groupId> <artifactId>rxkotlinfx</artifactId> <version>${rxkotlinfx.version}</version> </dependency> <dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxkotlin</artifactId> <version>${rxkotlin.version}</version> </dependency> <dependency> <groupId>no.tornado</groupId> <artifactId>tornadofx</artifactId> <version>${tornadofx.version}</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>${kotlin.version}</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-test</artifactId> <version>${kotlin.version}</version> <scope>test</scope> </dependency> </dependencies> 

并运行以下代码:

 fun main(args: Array<String>) { val source = listOf("A", "B", "C").toObservable() .filter { it == "B" } .subscribeBy( onNext = { println(it) } ) } 

我得到以下错误:

 Error:(37, 40) Kotlin: Cannot access class 'io.reactivex.Observable'. Check your module classpath for missing or conflicting dependencies 

为什么我得到这个错误,我需要什么设置的依赖关系能够使用这个堆栈?

我发现的唯一解决方案是明确依赖于:

 <dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxjava</artifactId> <version>2.1.3</version> </dependency> 

io.reactivex.Observable驻留在rxjava-2.1.3.jar库中,它是由您在pom.xml中声明的2个依赖关系带来的传递依赖:

  • com.github.thomasnield:rxkotlinfx:2.2.0

  • io.reactivex.rxjava2:rxkotlin:2.1.0

我试着用gradle来设置你的设置(对不起,我比maven更喜欢gradle),我使用gradle命令行来查看冲突解决方案是什么:结果如下:

 io.reactivex.rxjava2:rxjava:2.1.3 (conflict resolution) \--- io.reactivex.rxjava2:rxjavafx:2.2.0 \--- com.github.thomasnield:rxkotlinfx:2.2.0 \--- compileClasspath io.reactivex.rxjava2:rxjava:2.1.0 -> 2.1.3 \--- io.reactivex.rxjava2:rxkotlin:2.1.0 \--- compileClasspath io.reactivex.rxjava2:rxjavafx:2.2.0 \--- com.github.thomasnield:rxkotlinfx:2.2.0 \--- compileClasspath io.reactivex.rxjava2:rxkotlin:2.1.0 (selected by rule) \--- compileClasspath 

和gradle冲突解决方案选择了2.1.3

我知道gradle中的依赖管理比maven更强大,但是我会强制maven通过排除不需要的依赖版本来使用特定版本的传递依赖。

我会尝试以下内容:

 <dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxkotlin</artifactId> <version>${rxkotlin.version}</version> <exclusions> <exclusion> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxjava</artifactId> </exclusion> </exclusions> </dependency> 

或者,如果你不需要一些API,你可以删除

  <dependency> <groupId>com.github.thomasnield</groupId> <artifactId>rxkotlinfx</artifactId> <version>${rxkotlinfx.version}</version> </dependency>