JavaFX13创建可运行的jar“;无主清单属性“;
我正在试着让我的罐子跑起来。它会构建,但当我尝试运行jar时,它会说:JavaFX13创建可运行的jar“;无主清单属性“;,java,gradle,javafx,Java,Gradle,Javafx,我正在试着让我的罐子跑起来。它会构建,但当我尝试运行jar时,它会说: 在Sagrada.jar中没有主清单属性 build.gradle: plugins { id 'application' id 'org.openjfx.javafxplugin' version '0.0.8' id 'org.beryx.jlink' version '2.12.0' } apply plugin: 'java' repositories { mavenCentral
在Sagrada.jar中没有主清单属性
build.gradle
:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
id 'org.beryx.jlink' version '2.12.0'
}
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
// https://mvnrepository.com/artifact/org.apache.commons/commons-collections4
compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.18'
}
javafx {
version = "13"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
mainClassName = "$moduleName/nl.avans.sagrada.MainApp"
jlink {
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
launcher {
name = 'Sagrada'
}
}
然后我运行Tasks>application>run,这很好。但是当我尝试用Tasks>build>build或Tasks>build>jar构建一个jar时,它会输出这个jar,并出现上述问题
我遵循了JavaFX13教程:
然后JavaFX和IntelliJ>用Gradle模块化
我不想要图片,而是一个可以运行的罐子,我需要一个学校项目
我确实检查了设置为正确Java的路径
变量。我还尝试使用jar-jar Sagrada.jar nl.avans.Sagrada.MainApp运行jar
您没有在gradle构建中定义“manifest-attribute”
您应该这样指定“jar”任务:
jar {
manifest {
attributes(
'Main-Class': 'your.main.package.MainApp'
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
编辑:
您还应该澄清nessecary模块
您可以通过模块info.java
或使用gradle中的“compileJava”任务来声明要编译的VM参数
gradle:
compileJava {
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml,javafx.graphics'
]
println options.compilerArgs
}
}
模块信息.java
module ProjectName {
requires javafx.controls;
requires javafx.fxml;
requires transitive javafx.graphics;
// specify the package the uses the modules
opens com.your.package to javafx.fxml, javafx.controls;
exports org.openjfx;
}
我希望这有帮助
您还应该使用启动程序,启动应用程序,而不是将应用程序用作主类(如果您还没有这样做)。
主类不应扩展应用程序
公共类AppLauncher{
公共静态void main(字符串参数[]){
Application.launch(您的Application.class,args)
}
}
您没有在gradle构建中定义“清单属性”
您应该这样指定“jar”任务:
jar {
manifest {
attributes(
'Main-Class': 'your.main.package.MainApp'
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
编辑:
您还应该澄清nessecary模块
您可以通过模块info.java
或使用gradle中的“compileJava”任务来声明要编译的VM参数
gradle:
compileJava {
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml,javafx.graphics'
]
println options.compilerArgs
}
}
模块信息.java
module ProjectName {
requires javafx.controls;
requires javafx.fxml;
requires transitive javafx.graphics;
// specify the package the uses the modules
opens com.your.package to javafx.fxml, javafx.controls;
exports org.openjfx;
}
我希望这有帮助
您还应该使用启动程序,启动应用程序,而不是将应用程序用作主类(如果您还没有这样做)。
主类不应扩展应用程序
公共类AppLauncher{
公共静态void main(字符串参数[]){
Application.launch(您的Application.class,args)
}
}
谢谢。我没有收到此错误:错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件
谢谢。我没有收到此错误:错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件