2016-11-20 116 views
1

我使用gluon插件创建新的单个视图项目,并在其文件中没有任何更改。如果我使用gradle任务application > run,它工作正常。但是,如果使用了TAKS build > jar它创建的JAR SingleViewProject\build\libs下,当我在命令行中运行它,我得到使用Gradle任务创建后,可执行jar无法找到或加载主类

Error: Could not find or load main class com.gluonapplication.GluonApplication

这是不变的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.**.*' 
     ] 
    } 
} 

和“主类“:

package com.gluonapplication; 

import com.gluonhq.charm.glisten.application.MobileApplication; 
import com.gluonhq.charm.glisten.visual.Swatch; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.stage.Stage; 

public class GluonApplication extends MobileApplication { 

    public static final String BASIC_VIEW = HOME_VIEW; 

    @Override 
    public void init() { 
     addViewFactory(BASIC_VIEW,() -> new BasicView(BASIC_VIEW)); 
    } 

    @Override 
    public void postInit(Scene scene) { 
     Swatch.BLUE.assignTo(scene); 

     ((Stage) scene.getWindow()).getIcons().add(new Image(GluonApplication.class.getResourceAsStream("/icon.png"))); 
    } 
} 

这是真的,有在课堂上没有main方法,但你不应该需要一个。它直接从IDE运行。有什么问题?

回答

1

当您在Gluon项目上执行jar任务时,您将获得只有一个包含项目的主包和桌面包下的类和资源的jar包。在你的情况,这样的事情:

该JAR包含主类,但它不包含任何依赖关系(胶子的魅力)的。

如果你想创建一个可执行的jar,你需要创建一个shadowJarfatJar,它捆绑了该jar中的所有依赖关系。

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

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

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文件。

+0

很酷。你能帮我“添加插件”吗?我结帐该项目并建立一个罐子,然后包括它? – Mark

+0

我只是做了...我发布的代码已经包含了您需要做的所有事情:添加一个插件仅需要引用依赖关系并使用'apply plugin ...'。 Gradle为你管理。 –

+0

啊,太棒了!谢谢。如果任何人仍将在'build'下查看,我还会添加回答,即构建阴影jar的gradle任务位于'projectName/shadow/shadowJar'下。 – Mark

相关问题