2017-06-29 4 views
1

finden konnte, ich habe folgende Projektstruktur:gradle Projekt: Fehler nicht Hauptklasse

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

Der Weg zum Kunden Hauptklasse wie folgt aussieht:

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

mein build.gradle für die Client Unterprojekt looks wie folgt:

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

Die Haupt build.gradle Datei ist diese:

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' 
    } 
} 

Die Erzeugung der Gläser funktioniert so weit, aber die MANIFEST.MF Datei in dem Glas ist falsch. Es enthält Folgendes:

Manifest-Version: 1.0 
provider: gradle 

Wo ist meine angegebene Hauptklasse? Wenn ich versuche, das Startskript auszuführen, die durch die gradle application erstellt wurde -plugin ich den Fehler: couldn't find nor load main class

Das Glas enthält alle notwendigen Klassendateien

+0

versuchen 'mainClassName =" client.ComputePi "' – ToYonos

+0

Ich bekomme den gleichen Fehler: Konnte Hauptklasse nicht finden oder laden: "client.ComputePi" – shibumi

+0

Mein Kommentar war nicht genug, es war nur eine Beobachtung keine vollständige Antwort . Werfen Sie einen Blick auf die Antwort von @ Vampire – ToYonos

Antwort

1

Das application Plugin ein lauffähiges JAR mit Main-Class Eintrag nicht produzieren wird. Stattdessen erzeugt es eine Distribution mit Windows und * nix Start-Skripten, wobei die Hauptklasse verwendet wird und alle Bibliotheken in den Klassenpfad eingefügt werden.

Wenn Sie eine ausführbare JAR möchten, müssen Sie es selbst konfigurieren, oder verwenden Sie eine der Plugins, die eine fette JAR erzeugt, auch die Abhängigkeiten in die ausführbare JAR (Ich mag das nicht, aber es funktioniert, wenn Der Zielcomputer verfügt über die richtigen Dateizuordnungen. Wenn der Zielcomputer e. G. hat JAR-Dateien mit einem Archivierungswerkzeug verknüpft, doppelklicken Sie auf das JAR, um das JAR im Archivierungswerkzeug zu öffnen, und führen Sie Ihre Anwendung nicht aus.

Wenn Sie Ihre Anwendung ausführen möchten, verwenden Sie gradlew run, oder führen Sie gradlew installDist aus, und führen Sie dann die Anwendung aus, die unter build/install/... installiert ist. So funktioniert das Plugin application. Mit gradlew distZip oder gradlew distTar können Sie shippable Archive Ihrer Anwendung erstellen.

+0

gut zu wissen, viel lernen hier auch für mich, für meine kleine App habe ich nur die 'jar {}' Aufgabe erweitert und die Abhängigkeiten gepackt, es ist schnell, nicht ideal, aber es funktioniert, und ich würde wahrscheinlich ändern müssen Der Ansatz für meine andere App, die bereits groß geworden ist, und die erwähnte Vorgehensweise ist nicht sehr gut, wie Sie in einer anderen Änderung, die ich gesehen habe, gesagt haben. Was ist vorzuziehen, um eine runnable Java-App mit Gui zu erstellen? – LazerBanana

+0

@LazerBanana Ich weiß nicht, was du meinst? Eine lauffähige Java-App mit GUI ist großartig. Ich mag keine fetten JARs, aber bevorzuge, was das 'Application'-Plugin produziert, wenn das deine Frage ist. – Vampire

+0

Ich sehe, ok werde ich gehen und meine App refaktorieren, in einer anderen Hand, wenn dies nur eine Vorliebe ist. Danke für deine Antwort, auch wenn offtopic. – LazerBanana

Verwandte Themen