我正在尝试使我的jar运行。它可以构建,但是当我尝试运行jar时,它会显示:
no main manifest attribute, in 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> build> build或Tasks> build> jar构建jar时,它会输出具有上述问题的jar。
我遵循了JavaFX 13教程:https://openjfx.io/openjfx-docs/
然后JavaFX and IntelliJ > Modular with Gradle
我不需要图像,但是我需要一个用于学校项目的可运行罐子。
我确实检查了Path
变量,这些变量设置为正确的Java。我还尝试使用jar -jar Sagrada.jar nl.avans.sagrada.MainApp
运行jar。
答案 0 :(得分:2)
您没有在gradle版本中定义“清单-属性”。
您应该这样指定“ jar”任务:
jar {
manifest {
attributes(
'Main-Class': 'your.main.package.MainApp'
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
编辑:
您还应该澄清必要的模块。
您可以通过module-info.java
进行此操作,也可以在gradle中使用“ compileJava”任务来声明要编译的VM参数。
等级:
compileJava {
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls,javafx.fxml,javafx.graphics'
]
println options.compilerArgs
}
}
module-info.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;
}
我希望能对您有所帮助
此外,您应该使用启动器,该启动器将启动应用程序,而不应将应用程序用作主类(如果您尚未这样做)。 您的主类不应扩展应用程序。
public class AppLauncher{
public static void main(String args[]){
Application.launch(YourApplication.class,args)
}
}