web-dev-qa-db-fra.com

Gradle - aucun attribut manifeste principal

Je suis un peu fou avec cette erreur que je reçois lors de l’exécution d’un fichier JAR créé à partir de Gradle. L'erreur indique "pas d'attribut manifeste principal, dans RxJavaDemo.jar". J'ai essayé de manipuler la propriété Manifest, mais je pense que j'oublie d'ajouter des dépendances ou quelque chose de ce genre. Qu'est-ce que je fais exactement mal?

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

Essayez de changer les attributs de votre manifeste comme:

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

Et puis changez simplement 'hello.helloWorld' en '<your packagename>.<the name of your Main class>' (où votre classe Main a une méthode main). Dans ce cas, vous créez dans votre manifeste un attribut, qui pointe vers cette classe, puis un fichier jar est en cours d'exécution.

109
Stanislav

FWIW - J’ai utilisé la tâche jar suivante pour assembler toutes mes dépendances de compilation dans le fichier jar et la recommandation ci-dessus pour obtenir le chemin de classe correctement défini

apply plugin: 'Java-library'

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'your.main.class.goes.here'
    )
  }

  // You can reference any part of the dependency configurations,
  // and you can have as many from statements as you need
  from configurations.compile  
  // I just copied them into the top of the jar, so it looks like the Eclipse exported 
  // runnable jar, but you could designate a lib directory, and reference that in the 
  // classpath as "lib/$it.name" instead of it.getName()
  into ''   
}
0
Eric Hallander