2017-06-29 89 views
1

我有以下项目结构:gradle这个项目:错误找不到主类

Root project 'rmi-tutorial' 
+--- Project ':client' 
+--- Project ':lib' 
\--- Project ':server' 

给客户端的路径主要类看起来是这样的:

client/src/main/java/client/ComputePi.java

build.gradle为客户子项目喜欢这样:

dependencies { 
    compile project(':lib') 
} 
mainClassName = "ComputePi" 

主要的build.gradle文件是这个:

subprojects { 
    apply plugin: 'java' 
    apply plugin: 'eclipse' 
    apply plugin: 'application' 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
    //compile project(':server') 
    //compile project(':client') 
     testCompile 'junit:junit:4.12' 
    } 

    version = '1.0' 

    jar { 
     manifest.attributes provider: 'gradle' 
    } 
} 

罐子的产生至今的作品,但罐中的MANIFEST.MF文件是错误的。它包含以下内容:

Manifest-Version: 1.0 
provider: gradle 

我的指定主类在哪里?当我尝试-plugin我得到的错误来执行得到了由gradle这个application创建的startscript:couldn't find nor load main class

罐子包含所有必要的类文件

+0

尝试'mainClassName =“client.ComputePi”' – ToYonos

+0

我得到同样的错误:无法找到或加载主类:“client.ComputePi” – shibumi

+0

我的评论是不够的,这只是一个观察不是一个完整的答案。看看@吸血鬼的回答 – ToYonos

回答

1

application插件不会产生一个可运行的JAR与Main-Class条目。相反,它使用Windows和* nix启动脚本生成分发,其中使用了主类,并且所有库都放到了类路径中。

如果你想要一个可运行的JAR,你必须自己配置它,或者使用其中一个生成胖JAR的插件,还包括依赖到可运行JAR中(我不喜欢这样,但它的工作原理是目标计算机具有正确的文件关联设置)。如果目标计算机e。 G。已将JAR文件与归档工具相关联,双击JAR将在归档工具中打开JAR,而不运行应用程序。

如果要运行应用程序,请使用gradlew run或执行gradlew installDist,然后执行安装到build/install/...的应用程序。这就是application插件的工作原理。通过gradlew distZipgradlew distTar,您可以创建应用程序的可装运存档。

+0

有用的知识,为我学习这里的负载,对于我的小应用程序,我刚刚扩展了''jar'任务并打包了依赖项,它很快,并不理想,但它工作正常,我可能需要更改我的其他应用程序的方法已经实际上已经变大了,并且使用上述方法并不是很好,就像您在我看到的其他更改中所说的那样。与Gui创建可运行的Java应用程序最好是什么? – LazerBanana

+0

@LazerBanana我不知道你的意思?使用GUI的可运行Java应用程序非常棒。我只是不喜欢胖JAR,但更喜欢'应用程序'插件产生的,如果那是你的问题。 – Vampire

+0

我明白了,好吧,如果这只是一个偏好,我会去重构我的应用,另一方面。感谢您的回答,即使是不合时宜的。 – LazerBanana