当前位置: 首页 > 知识库问答 >
问题:

Gradle包装器在构建时找不到javafx,内置gradle在构建时工作正常

施刚毅
2023-03-14

问题是,通过包装器执行 gradle 命令将导致编译 Kotlin 步骤失败,并有不同的提及,即它无法找到与 javafx 相关的类/包。

我正在设置整个项目结构,以便所有构建系统都不依赖于IDE,而是依赖于使用包装器来执行所有构建。

但是在命令行上执行gradlew.bat构建会因上述错误而失败。但是,通过Intellij中嵌入的Gradle执行“构建”是有效的。(附图片)

有几件事要提一下:

    < li>kotlin版本1.3.50(最新版本) < li >包装属性中的分级版本是5.6.2

构建失败图片:

我已经尝试了很多与此相关的建议(无效缓存重启、重新导入项目、再次生成包装器、您将看到的所有常见解决方案)。它们都不起作用,所以问题仍然存在。我尝试在Gradle版本之间切换并再次运行包装器,但没有成功,似乎为包装器指定的版本及其下拉的Gradle发行版并不重要,因为构建失败,所有版本都存在完全相同的错误。

请注意,这是最近Intellij Idea从2019.2.2版更新到2019.2.3版后发生的,我真的希望这不是背后的根本问题。

这并不是唯一一个使用javafx的Gradle kotlin-dsl项目现在失败了:即使通过Intellij的tornadofx-plugin创建一个新的空项目并将其迁移到kotlin-dsl也会产生相同的结果:compileKotlin任务将失败。除此之外,几个使用gradle kotlin-dsl的老项目从包装器开始构建时,突然出现了同样的错误。

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import edu.sc.seis.launch4j.tasks.DefaultLaunch4jTask

plugins {
    application
    id("edu.sc.seis.launch4j") version "2.4.6"
    kotlin("jvm") version "1.3.50"
}

group = "genericdesktopapp"
version = "1.0-SNAPSHOT"

application {
    mainClassName = "root/RootKt"
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    implementation(kotlin(module = "reflect", version = "1.3.50"))
    implementation(kotlin("stdlib-jdk8"))
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-RC")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-javafx:1.3.0-RC")
    implementation("org.slf4j:slf4j-api:1.7.21")
    implementation("com.lmax:disruptor:3.3.4")
    implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.6.2")
    implementation("org.apache.logging.log4j:log4j-api:2.6.2")
    implementation("org.apache.logging.log4j:log4j-core:2.6.2")
    implementation("commons-io:commons-io:2.6")
    implementation("org.apache.commons:commons-text:1.6")
    implementation("com.github.salomonbrys.kodein:kodein:4.1.0")
    implementation("commons-validator:commons-validator:1.6")
    implementation("no.tornado:tornadofx:1.7.17")

    testImplementation("org.junit.jupiter:junit-jupiter-api:5.1.0")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.1.0")

}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.withType<DefaultLaunch4jTask> {
    outfile = "GenericToolbox.exe"
    mainClassName = "root.Root"
    productName = "GenericToolbox"
}

我希望当我在命令行中运行时.bat构建或./gradlew构建,以便它正常完成并从javafx中找到相关类,就像使用Intellij Gradle构建命令时发生的那样。

这个问题甚至不应该发生,因为我把所有东西都放在java-8上,我知道这个问题应该发生在超过8的版本上。我还看到在gradle缓存中有来自kotlin的stdlib-jdk7,我没有在Intellij配置或构建脚本中指定任何与jdk 7相关的内容,所以这也是奇怪的事情。(即使缓存重置也会使gradle将其拉回到缓存中,所以我想可能是gradle的嵌入式kotlin编译器就是这个版本)。

编辑:一种简单的复制方法(现在刚刚测试过)。打开命令行并使用 gradle kotlin dsl 创建一个新项目:

    < li>mkdir测试项目 < li>cd测试项目 < li>gradle init - dsl kotlin

在生成的项目上,运行gradlew。bat构建或/gradlew构建,并查看compileKotlinworking okay,构建成功。在同一个项目中,在生成的App中。kt文件,在main函数中,添加一个简单的valstage=stage()(从javafx导入)。再次运行gradlew。bat构建并查看它现在失败了,因为它没有找到javafx

共有1个答案

叶福
2023-03-14

我已经设法找到了解决这个问题的方法,但是,这不是一个适当的解决方案,因为我仍然没有找到发生这种情况的原因,但我会发布它,以防其他人遇到这个问题,也许它会有所帮助。

解决方案是(奇怪的是)指定gradle在通过包装器运行命令时将使用的jdk版本:

gradlew.bat build -Dorg.gradle.java.home=---path-to-jdk---

我已经检查了我的环境变量,java home变量已经指向同一个位置,所以不知何故,我相信gradle找不到java主页,而是使用嵌入的东西(很可能是java 8以上的东西),这会产生这个错误。运行智能刻度是有效的,因为它使用英特利奇中的嵌入式jdk,这也是java8,所以这解释了为什么他们从渐变侧窗通过英特利吉构建按钮工作。

如果有人找到根本原因或有其他建议,请随时分享您的知识。

 类似资料:
  • 我刚通过自制安装了Gradle。版本7.0。我运行了一个hello world任务,没有出错。然后,我按照说明安装ml-gradle(https://github.com/marklogic-community/ml-gradle)。我得到构建失败的原因是: 错误:在任务“:MLNewProject”(键入“NewProjectTask”)的配置中发现了一些问题。 > 类型'NewProjectT

  • 我一直在使用gradle作为Springboot,它过去很好,但gradle的构建突然停止了工作。我不断收到错误,说找不到依赖项 这是分级代码: 我得到的错误是: 无法解析组织。springframework。启动:spring启动依赖项:2.4。1.无法解析io。关键的。Spring云:spring云服务依赖项:2.4。1.无法解析组织。springframework。云:spring云依赖项:

  • 在Android Studio上,打包运行,导入的包管理,都是使用Gradle,所以了解 Gradle 是非常必要的。这章我们一起学习 Gradle。

  • 我正在尝试建立一个gradle项目。 以下是我的项目结构: 这是我的tobris erpgradle.build(1) 这是我的buildSrcgradle.build(2): 我使用hibernate从XML文件生成数据库实体。生成的类位于生成下的src gen文件夹下。 问题是当我构建项目时,src-gen下的类显示此错误 /tobris-erp/build/src-gen/java/com/

  • 我有Android Studio 3.1.2 我有Kotlin 1.2.41-release-Studio3。1-1. ,我只使用kotlin kapt: 我的事件日志显示0个警告/错误: 这是输出: 我已经完成了所有的清理和重建工作。有一些警告,但与kapt无关。我可以先解决这些问题吗?

  • 今天突然,我得到了一个错误,当我试图运行我的应用程序在Android Studio。 它是: 我没有改变gradle文件中的任何内容,但它突然出现了。几分钟前,我的上一个构建成功执行。 为什么它找不到