可执行jar可以';在它之后找不到或加载主类';它是用gradle任务创建的

可执行jar可以';在它之后找不到或加载主类';它是用gradle任务创建的,gradle,gluon-mobile,Gradle,Gluon Mobile,我使用gluon插件创建了一个新的单视图项目,但没有更改其文件中的任何内容。如果我使用gradle任务application>run。但是如果我使用taksbuild>jar它在SingleViewProject\build\libs下创建了jar,当我从命令行运行它时 错误:无法找到或加载主类com.gloonapplication.gloonapplication 这是未触及的build.gradle: buildscript { repositories { jce

我使用gluon插件创建了一个新的单视图项目,但没有更改其文件中的任何内容。如果我使用gradle任务
application>run
。但是如果我使用taks
build>jar
它在
SingleViewProject\build\libs
下创建了jar,当我从命令行运行它时

错误:无法找到或加载主类com.gloonapplication.gloonapplication

这是未触及的build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.1.1'
    }
}

apply plugin: 'org.javafxports.jfxmobile'

repositories {
    jcenter()
    maven {
        url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
    }
}

mainClassName = 'com.gluonapplication.GluonApplication'

dependencies {
    compile 'com.gluonhq:charm:4.1.0'
}

jfxmobile {
    downConfig {
        version = '3.0.0'
        plugins 'display', 'lifecycle', 'statusbar', 'storage'
    }
    android {
        manifest = 'src/android/AndroidManifest.xml'
    }
    ios {
        infoPList = file('src/ios/Default-Info.plist')
        forceLinkClasses = [
                'com.gluonhq.**.*',
                'javax.annotations.**.*',
                'javax.inject.**.*',
                'javax.json.**.*',
                'org.glassfish.json.**.*'
        ]
    }
}
以及“主要阶层”:


类中确实没有
main
方法,但您不应该需要它。它直接从IDE运行良好。有什么问题吗?

当您在Gluon项目上执行
jar
任务时,您只会得到一个jar,其中包含项目主包和桌面包下的类和资源。在您的情况下,类似这样的情况:

该jar包含主类,但不包含任何依赖项(glion)

如果您想创建一个可执行的jar,您需要创建一个
shadowJar
fatJar
,它捆绑了该jar中的所有依赖项

您可以基于此添加此插件:
com.github.johnrengelman.shadow

一旦你添加了插件,你所需要做的就是让它知道你的自定义配置,因为它不知道桌面配置

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.1.1'
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4'
    }
}

apply plugin: 'org.javafxports.jfxmobile'
apply plugin: 'com.github.johnrengelman.shadow'

...

// Add desktop dependencies to the task
shadowJar {
    configurations = [project.configurations.desktopRuntime]
}
重新加载项目并执行
shadowJar
。您可以在“任务”菜单下找到它:

您将在/builds/libs/yourProjectName-all.jar下找到可执行jar


很酷。你能帮我“添加插件”吗?我是否签出项目并构建一个jar,然后将其包括在内?我只是。。。我发布的代码已经包含了所有需要做的事情:添加插件只需要引用依赖项并使用
applyplugin…
。格雷德尔帮你搞定了。啊,太好了!谢谢我还想补充一点,如果有人仍在查看
build
,那么构建shadowJar的gradle任务位于
projectName/shadow/shadowJar
下。好的,我已经用任务菜单的屏幕截图编辑了答案。如果您有多个
shadow*
任务,则会出现
shadow
子菜单。
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.1.1'
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4'
    }
}

apply plugin: 'org.javafxports.jfxmobile'
apply plugin: 'com.github.johnrengelman.shadow'

...

// Add desktop dependencies to the task
shadowJar {
    configurations = [project.configurations.desktopRuntime]
}