我在 intellij 中使用 Gradle 构建系统 我尝试在 intellIj 中创建一个工件并构建 jar,但是我遇到了 3 个问题:
1)转到项目结构/工件,创建一个 JavaFX 应用程序类型的 jar。输入主类的路径。 Artifact 已创建,但面临“无法构建 Artifact - fx:deploy 在此 JDK 中不可用”(我使用的是 JDK 21)
尝试构建一个经典的 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 任务“jlink”并在 build/image 中获取了图像,然后我在 image/bin 中运行了 .bat 文件,我的应用程序运行了! 我想创建我的项目的可执行版本。所以,我不再需要 jar 了。感谢jewelsea!
不要将 intellij 的构建 jar 工件与 javaFX 和 gradle 构建系统一起使用,它已经损坏了。