2015-09-14 14 views
32

Ich bin irgendwie verrückt mit diesem Fehler, den ich bekomme, wenn ich eine JAR-Datei lief, die von Gradle erstellt wurde. Der Fehler lautet "Kein Hauptmanifest-Attribut in RxJavaDemo.jar" Ich habe versucht, die Manifest-Eigenschaft zu manipulieren, aber ich denke, dass ich vergessen habe, die Abhängigkeiten oder etwas hinzuzufügen. Was genau mache ich falsch?Gradle - kein Hauptmanifest-Attribut

apply plugin: 'java' 
apply plugin: 'application' 

mainClassName = 'demo.MainDashboard' 

dependencies { 

    compile files ("H:/Processes/Development/libraries/hikari-cp/HikariCP-2.4.1.jar") 
    compile files ("H:/Processes/Development/libraries/controls-fx/controlsfx.jar") 
    compile files ("H:/Processes/Development/libraries/database_connections/sqlite-jdbc-3.8.6.jar") 
    compile files ("H:/Processes/Development/libraries/guava/guava-18.0.jar") 
    compile files ("H:/Processes/Development/libraries/rxjava/rxjava-1.0.12.jar") 
    compile files ("H:/Processes/Development/libraries/rxjava-extras/rxjava-extras-0.5.15.jar") 
    compile files ("H:/Processes/Development/libraries/rxjavafx/RxJavaFX-1.0.0-RC1-SNAPSHOT.jar") 
    compile files ("H:/Processes/Development/libraries/rxjavaguava/rxjava-guava-1.0.3.jar") 
    compile files ("H:/Processes/Development/libraries/rxjava-jdbc/rxjava-jdbc-0.6.3.jar") 
    compile files ("H:/Processes/Development/libraries/slf4j/slf4j-api-1.7.12.jar") 
    compile files ("H:/Processes/Development/libraries/tom-commons/tom-commons.jar") 

} 

sourceSets { 
    main.java.srcDir "src/main/java" 
    main.resources.srcDir "src/main/resources" 
} 

    jar { 
    manifest { 
    attributes(
     "Class-Path": configurations.compile.collect { it.getName() }.join(' ')) 
    } 
    from configurations.compile.collect { entry -> zipTree(entry) } 
} 

Antwort

57

Versuchen Sie, Ihre offensichtlichen Attribute wie zu ändern:

jar { 
    manifest { 
    attributes(
     'Class-Path': configurations.compile.collect { it.getName() }.join(' '), 
     'Main-Class': 'hello.HelloWorld' 
    ) 
    } 
} 

Und dann ändern Sie einfach 'hello.helloWorld' Ihre Klasse, die eine Hauptmethode hat. In diesem Fall machst du in deinem Manifest ein Attribut, das auf diese Klasse zeigt, dann läuft ein Jar.

+0

@Stanislav 'Main-Class' Wert ist die Hauptklasse? Was sind Hallo und HelloWorld in Ihrem Beispiel? –

+1

@DanielaMaia es ist nur ein voll qualifizierter Klassenname, sicher, dass es als hallo.HelloWorld geschrieben werden muss, wo hallo ist das Paket, wo die HelloWorld-Klasse befindet – Stanislav

+2

Ich musste den 'collect {}' Teil entfernen, um es zu arbeiten für mich. Ihr Code geht davon aus, dass sich alle Abhängigkeiten im selben Ordner wie Ihre Hauptklasse befinden. – AutonomousApps

Verwandte Themen