2017-06-29 109 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