【问题标题】:JavaFX Error : Could not find or load main class home.main with gradle (IntelliJ) when I try to run my jar fileJavaFX 错误:当我尝试运行我的 jar 文件时,无法使用 gradle (IntelliJ) 找到或加载主类 home.main
【发布时间】:2020-11-07 00:30:56
【问题描述】:

我用 gradle 生成一个 jar 文件来测试我的程序,但是当我运行命令时:

Java -jar file_name .jar 

我总是遇到同样的错误:

Error: Could not find or load main class home.Main
Caused by: java.lang.ClassNotFoundException: home.Main

build.gradle:

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'com.jfoenix:jfoenix:9.0.8'
}

javafx {
    version = "14"
    modules = [ 'javafx.controls', 'javafx.fxml']
}


jar {
    manifest {
        attributes(
                'Class-Path': configurations.compile.files.collect {"$it.name"}.join(' '),
                'Main-Class': 'home.Main')}
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

Architecture

Artifacts settings

【问题讨论】:

    标签: java gradle jar


    【解决方案1】:

    更新:

    为了制作“fatJar”,我的 build.gradle 中的这个任务对我有用:

    task fatJar(type: Jar) {
        manifest {
            attributes 'Main-Class': "home.Launcher"
        }
        baseName = 'Desired_fat_jar_name'
        from {
            configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        }
        with jar
    }
    

    所以你运行gradlew fatJar 将所有东西都放在一个罐子里。

    它看起来非常接近您所拥有的,因此请尝试将您的更改为此或尝试从 build.gradle 中删除“Class-Path”部分。


    要使用 Java 9+ 启动非模块化 JavaFX 应用程序,您需要创建一个 Launcher.java 文件,其内容如下:

    package home;
    
    /**
     * Class to launch the JavaFX application.
     *
     * This launcher class will allow launching a non-modular 9+ JavaFX application.
     */
    public class Launcher
    {
        /**
         * Main function executed by Java application
         * @param args
         */
        public static void main(String[] args)
        {
            Main.main(args);
        }
    }
    

    其中“Main.main”是您的类中扩展 JavaFX 应用程序类的主要函数。

    您还需要将 build.gradle 中的主类更改为“home.Launcher”。

    【讨论】:

    • 我有同样的错误:Error: Could not find or load main class home.Launcher Caused by: java.lang.ClassNotFoundException: home.Launcher
    • 在你的 build.gradle 中尝试添加: application { // 定义应用程序的主类 mainClassName = 'home.Launcher' }
    猜你喜欢
    • 2017-07-30
    • 2021-12-10
    • 1970-01-01
    • 2020-02-18
    • 2018-12-16
    • 2020-06-02
    • 2019-07-21
    • 2017-11-06
    • 2017-12-14
    相关资源
    最近更新 更多