Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX13创建可运行的jar“;无主清单属性“;_Java_Gradle_Javafx - Fatal编程技术网

JavaFX13创建可运行的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

我正在试着让我的罐子跑起来。它会构建,但当我尝试运行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()
}

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运行时组件,运行此应用程序需要这些组件