J'essaye d'exécuter un pot à partir du studio Android. Après une longue solution de contournement, le fichier jar fonctionne parfaitement.

Maintenant, je dois exporter le fichier jar depuis le studio Android. J'ai récupéré le fichier Jar dans le dossier build / libs.

Mais le problème est que le fichier jar affiche une erreur.

pas d'attribut manifeste principal, dans "app.jar"

J'ai donc trouvé cette solution. Impossible d'exécuter le fichier jar: "aucun attribut de manifeste principal"

Puis j'ai lu sur MANIFEST.MF et ajouté la classe mail à ce fichier.

jar {
    manifest.attributes(
            'Main-Class': "com.Remo.server.RemoServerApp"
    )
}

Après avoir ajouté ceux dans mon grade. My MANIFEST.MF contient la MainClass.

Mais je reçois toujours la même erreur? Comment puis-je resoudre ceci ?

Remarque: l'objectif est que je souhaite exporter un fichier Jar exécutable à partir du projet.

MISE À JOUR:

Après avoir ajouté la MainClass dans MANIFEST.MF. Je suis resté coincé avec l'erreur ci-dessous.

Exception in thread "main" java.lang.NoClassDefFoundError: com/Remo/protocol/RemoConnection
    at com.Remo.server.RemoServerApp.<init>(RemoServerApp.java:33)
    at com.Remo.server.RemoServerApp.main(RemoServerApp.java:97)
Caused by: java.lang.ClassNotFoundException: com.Remo.protocol.RemoConnection
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

MANIFEST.MF

Version du manifeste: 1.0
Classe principale: com.Remo.server.RemoServerApp

MISE À JOUR 2

D'après votre solution, ce que j'ai compris, c'est que nous devons copier le fichier jar remoprotocol sur le remoserver.

fichier d'évaluation du projet remoserver

apply plugin: 'java'

sourceSets {
    main {
        resources.srcDirs = ['src/main/resources']
    }
}

dependencies {
    compile project(':remoprotocol')
    compile files('libs/bluecove-2.1.1.jar')
}

jar {
    manifest.attributes(
            'Main-Class': "com.remo.server.remoServerApp"
    )
    manifest.attributes(
            'Class-Path': configurations.runtime.files.collect { it.getName() }.join(' '))
}

task copyRTDependenciesToLib(type: Copy) {
    into "$buildDir/output/lib"
    from configurations.runtime
}

Après avoir exécuté la tâche gradle, j'obtiens également la même erreur.

4
user3467240 31 déc. 2015 à 22:26

1 réponse

Je n'ai aucune expérience avec Android Studio (ou Gradle), mais j'ai avec Java. N'essayez-vous pas de définir la classe principale à la place?

Par conséquent, je suggère de changer l'attribut Class-Path en Main-Class car le manifeste doit contenir Main-Class pour pouvoir invoquer quelque chose lors de "l'exécution" du JAR.

-1
Miro Hudak 3 janv. 2016 à 21:32