Je deviens fou avec cette erreur que j'obtiens lors de l'exécution d'un fichier JAR construit à partir de Gradle. L'erreur lit "pas d'attribut manifeste principal, dans RxJavaDemo.jar" J'ai essayé de manipuler la propriété Manifest mais je pense que j'oublie d'y ajouter les dépendances ou quelque chose. Qu'est-ce que je fais exactement de 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) }
}
collect {}
partie pour qu'elle fonctionne pour moi. Votre code suppose que toutes les dépendances se trouvent dans le même dossier que votre classe principale.FWIW - J'ai utilisé la tâche jar suivante pour assembler toutes mes dépendances de compilation dans le fichier jar, et utilisé 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 '' }
la source
Pour rendre le
jar
fichier exécutable (afin que lajava -jar
commande fonctionne), spécifiez l'Main-Class
attribut dansMANIFEST.MF
.Dans Gradle, vous pouvez le faire en configurant la
jar
tâche.tasks.withType<Jar> { manifest { attributes["Main-Class"] = "com.caco3.Main" } }
Pourquoi
mainClassName
ne fonctionne pas comme prévu?Ou pourquoi
mainClassName
ne spécifie pas l'attribut dans le manifeste?La
mainClassName
propriété provient duapplication
plugin . Le plugin:Ainsi , le
application
plug - in ne vise pas à produire des exécutablesjar
sLorsqu'une
mainClassName
propriété est définie, alors:$ ./gradlew run
lancera lamain
méthode dans la classe spécifiée dans l'attributzip
/tar
construite à l'aide dedistZip
/distTar
tasks contiendra un script, qui lancera lamain
méthode de la classe précédemment spécifiée.Voici la ligne de script shell définissant la classe principale:
$ grep Main2 gradletest eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLETEST_OPTS -classpath "\"$CLASSPATH\"" com.caco3.gradletest.Main2 "$APP_ARGS"
la source