构建工件和 jar 的 JavaFX 问题

问题描述 投票:0回答:1

我在 intellij 中使用 Gradle 构建系统 我尝试在 intellIj 中创建一个工件并构建 jar,但是我遇到了 3 个问题:

1)转到项目结构/工件,创建一个 JavaFX 应用程序类型的 jar。输入主类的路径。 Artifact 已创建,但面临“无法构建 Artifact - fx:deploy 在此 JDK 中不可用”(我使用的是 JDK 21)

尝试构建一个经典的 JAR 。

  1. 使用选定的选项“JAR 文件从库提取到目标 JAR”创建了一个 jar 工件,然后尝试启动它并收到此错误:
    no main manifest attribute, in D:\Projects\mobileExam\out\artifacts\mobileExam_jar\mobileExam.jar
    。顺便说一句,我在 JAR 中有一个清单。

3)使用选定的选项“将库中的 JAR 文件复制到输出目录并通过清单链接”创建了一个 jar 工件,然后尝试启动 JAR 并收到此错误

Invalid or corrupt jarfile D:\Projects\mobileExam\out\artifacts\mobileExam_jar2\mobileExam.jar
。为什么 gradle 损坏了我的 JAR?我正在使用 gradle 8.5。

这是我的清单:

Main-Class: com.english.mobileexam.mobileexam.Launch
Class-Path: junit-platform-engine-1.10.0.jar javafx-fxml-21-win.jar ikon
 li-javafx-12.3.1.jar ikonli-core-12.3.1.jar formsfx-core-11.6.0.jar jun
 it-platform-commons-1.10.0.jar javafx-swing-21-win.jar tilesfx-11.48.ja
 r javafx-controls-21.jar bootstrapfx-core-0.4.0.jar javafx-controls-21-
 win.jar javafx-base-21.jar javafx-base-21-win.jar javafx-graphics-21-wi
 n.jar validatorfx-0.4.0.jar javafx-web-21-win.jar junit-jupiter-api-5.1
 0.0.jar javafx-media-21.jar controlsfx-11.1.2.jar junit-jupiter-engine-
 5.10.0.jar opentest4j-1.3.0.jar javafx-graphics-21.jar javafx-media-21-
 win.jar

我的build.gradle文件

plugins {
  id 'java'
  id 'application'
  id 'org.javamodularity.moduleplugin' version '1.8.12'
  id 'org.openjfx.javafxplugin' version '0.0.13'
  id 'org.beryx.jlink' version '2.25.0'
}

group 'com.english.mobileexam'
version '1.0-SNAPSHOT'

repositories {
  mavenCentral()
}

ext {
  junitVersion = '5.10.0'
}

sourceCompatibility = '21'
targetCompatibility = '21'

tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8'
}

application {
  mainModule = 'com.english.mobileexam.mobileexam'
  mainClass = 'com.english.mobileexam.mobileexam.HelloApplication'
}

javafx {
  version = '21'
  modules = ['javafx.controls', 'javafx.fxml', 'javafx.web', 'javafx.swing' ]
}

dependencies {
  implementation('org.controlsfx:controlsfx:11.1.2')
  implementation('com.dlsc.formsfx:formsfx-core:11.6.0') {
    exclude(group: 'org.openjfx')
  }
  implementation('net.synedra:validatorfx:0.4.0') {
    exclude(group: 'org.openjfx')
  }
  implementation('org.kordamp.ikonli:ikonli-javafx:12.3.1')
  implementation('org.kordamp.bootstrapfx:bootstrapfx-core:0.4.0')
  implementation('eu.hansolo:tilesfx:11.48') {
    exclude(group: 'org.openjfx')
  }

  testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
  testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
}

test {
useJUnitPlatform()}

jlink {
  imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip")
  options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
  launcher {
    name = 'app'
  }
}

jlinkZip {
  group = 'distribution'
}
gradle intellij-idea javafx jar artifact
1个回答
0
投票

所以,我刚刚在我的项目中执行了 gradle 任务“jlink”并在 build/image 中获取了图像,然后我在 image/bin 中运行了 .bat 文件,我的应用程序运行了! 我想创建我的项目的可执行版本。所以,我不再需要 jar 了。感谢jewelsea

不要将 intellij 的构建 jar 工件与 javaFX 和 gradle 构建系统一起使用,它已经损坏了。

© www.soinside.com 2019 - 2024. All rights reserved.