Gradle 编译在 Linux 上找不到 tornadofx

Posted

技术标签:

【中文标题】Gradle 编译在 Linux 上找不到 tornadofx【英文标题】:Gradle Compilation can't find tornadofx on Linux 【发布时间】:2018-01-16 09:52:37 【问题描述】:

我正在尝试用 gradle 编译一个 kotlin 应用程序。该应用程序使用 tornadofx(javafx 的 kotlin 版本)。

build.gradle,我有:

dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'no.tornado:tornadofx:1.7.8'
    compile 'com.squareup.moshi:moshi:1.5.0'
    compile 'com.squareup.moshi:moshi-kotlin:1.5.0'

    // Required for local unit tests (JUnit 4 framework)
    testCompile 'junit:junit:4.12'

MyApp.kt 我有:

import javafx.application.Application
import tornadofx.App

当我在 Windows 10 上编译这个项目时,无论是使用 gradle clean build 还是 .\gradlew clean build,它都能完美编译并运行。

当我在 Ubuntu Linux 上编译这个项目时,我收到一页错误消息,包括:

...

e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
    class tornadofx.UIComponent, unresolved supertypes: javafx.event.EventTarget
    class tornadofx.App, unresolved supertypes: javafx.application.Application

...

e: /home/al/project/app/src/pcUi/MyApp.kt: (3, 8): Unresolved reference: javafx
e: /home/al/project/app/src/pcUi/MyApp.kt: (12, 5): Unresolved reference: Application

...

虽然如果我从干净的设置中执行此操作,gradle 输出还包括:

Download https://jcenter.bintray.com/no/tornado/tornadofx/1.7.8/tornadofx-1.7.8.pom
Download https://jcenter.bintray.com/com/squareup/moshi/moshi/1.5.0/moshi-1.5.0.pom
Download https://jcenter.bintray.com/com/squareup/moshi/moshi-parent/1.5.0/moshi-parent-1.5.0.pom
Download https://jcenter.bintray.com/com/squareup/moshi/moshi-kotlin/1.5.0/moshi-kotlin-1.5.0.pom
Download https://jcenter.bintray.com/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.pom
Download https://jcenter.bintray.com/org/glassfish/json/1.0.4/json-1.0.4.pom
Download https://jcenter.bintray.com/net/java/jvnet-parent/3/jvnet-parent-3.pom
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.1.3/kotlin-stdlib-jre8-1.1.3.pom
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.1.3/kotlin-reflect-1.1.3.pom
Download https://jcenter.bintray.com/com/squareup/okio/okio/1.13.0/okio-1.13.0.pom
Download https://jcenter.bintray.com/com/squareup/okio/okio-parent/1.13.0/okio-parent-1.13.0.pom
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.1.3/kotlin-stdlib-jre7-1.1.3.pom
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.3/kotlin-stdlib-1.1.3.pom
Download https://jcenter.bintray.com/no/tornado/tornadofx/1.7.8/tornadofx-1.7.8.jar
Download https://jcenter.bintray.com/com/squareup/moshi/moshi/1.5.0/moshi-1.5.0.jar
Download https://jcenter.bintray.com/com/squareup/moshi/moshi-kotlin/1.5.0/moshi-kotlin-1.5.0.jar
Download https://jcenter.bintray.com/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.1.3/kotlin-stdlib-jre8-1.1.3.jar
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.1.3/kotlin-reflect-1.1.3.jar
Download https://jcenter.bintray.com/com/squareup/okio/okio/1.13.0/okio-1.13.0.jar
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.1.3/kotlin-stdlib-jre7-1.1.3.jar
Download https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.3/kotlin-stdlib-1.1.3.jar

这对我来说没有意义,因为它正确下载了依赖项(在 Linux 和 Windows 上),但只能在 Windows 而不是 Linux 上成功编译。我一直无法弄清楚发生了什么,所以任何人都可以提供任何关于在哪里看的建议吗?

【问题讨论】:

假设您使用的是 OpenJDK,JavaFX 默认不包含在 Oracle 的 JDK 中,因此您可能需要安装它或切换到 Oracle。 如果你在 Ubuntu 上,就像sudo apt-get install openjfx 一样简单 【参考方案1】:

查看错误信息:

e: /home/al/project/app/src/pcUi/MyApp.kt: (3, 8): Unresolved reference: javafx e: /home/al/project/app/src/pcUi/MyApp.kt: (12, 5): Unresolved reference: Application

您似乎没有在 Ubuntu 上正确设置 JDK。 JavaFX 不再是 OpenJDK 的一部分,您必须手动安装它:https://packages.qa.debian.org/o/openjfx.html

编辑:见https://***.com/a/43301246/4697327。您可能在 Windows 上使用 Oracle JDK,其中包含 JavaFX。

【讨论】:

太棒了,谢谢。我想我一直在错误地假设 gradle 正在下载所有必要的东西(包括 javafx),但显然它只是获得了 tornadofx 附加位。在 Linux 上安装 openjfx 就解决了。【参考方案2】:

为了在我的项目中快速重新包含 JavaFX,我修改了我的 build.grade 文件并让它同步。

plugins 
    id 'org.openjfx.javafxplugin' version '0.0.8'


repositories 
    mavenCentral()


javafx 
    version = "15.0.1"
    modules = [ 'javafx.controls', 'javafx.fxml' ]

【讨论】:

我在 Mac 上,这对我有用。谢谢!

以上是关于Gradle 编译在 Linux 上找不到 tornadofx的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 在 Android Studio 或您的系统上找不到安装的 Gradle 版本以安装 gradle 包装器

在 com.android.build.gradle.internal.api.ApplicationVariantImpl 上找不到属性“outputFile”

在以下类型的对象上找不到参数 [com.android.tools.build:gradle:3.3.0] 的方法 classpath():

Gradle eclipse 插件:在存储库容器上找不到参数 [] 的方法 jcenter()。有关详细信息,请参阅错误日志

在“”类型上找不到带有“数字”类型参数的索引签名 - Typescript 编译器错误

g++ -m32 在 debian amd64 上找不到 libstdc++