2015-09-14 15 views
32

Jestem trochę zwariowany z powodu tego błędu, który pojawia się podczas uruchamiania pliku JAR zbudowanego z Gradle. Błąd "nie ma głównego atrybutu manifestu, w RxJavaDemo.jar" Próbowałem manipulować właściwością Manifest, ale myślę, że zapomniałem dodać zależności lub coś do tego. Co dokładnie robię źle?Gradle - brak głównego atrybutu manifestu

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

Odpowiedz

57

spróbować zmienić swoje oczywiste atrybuty jak:

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

A potem po prostu zmienić 'hello.helloWorld' do swojej klasy, która ma główną metodę. W tym przypadku w manifeście tworzysz atrybut, który wskazuje na tę klasę, a następnie działa słoik.

+0

@ Główna klasa "Czy klasa podstawowa" to główna klasa? Czym są Witam i cześć na waszym przykładzie? –

+1

@ DanielaMaia to po prostu pełna nazwa klasy, na pewno musi być napisana jako hello.HelloWorld, gdzie hello jest pakietem, w którym znajduje się klasa HelloWorld – Stanislav

+2

Musiałem usunąć porcję 'collect {}', aby ją uruchomić dla mnie. Twój kod zakłada, że ​​wszystkie zależności znajdują się w tym samym folderze, co główna klasa. – AutonomousApps

Powiązane problemy