problème réalisation fichier jar
Bonjour,
je finalise une application domotique destinée à tourner sur un Raspberry Pi avec la librairie pi4J.
http://pi4j.com/
Le soft tourne bien. La réalisation d'un fichier jar à partir du projet fonctionne aussi. Par contre, à l’exécution de ce fichier jar, j'ai systématiquement le fameux NoClassDefFoundError qui survient. Ne trouvant pas l'erreur, j'ai réussi à reproduire l'erreur avec un code de quelques lignes:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
1 import com.pi4j.io.gpio.GpioController;
2 import com.pi4j.io.gpio.GpioFactory;
3 import com.pi4j.io.gpio.GpioPinDigitalInput;
4 import com.pi4j.io.gpio.PinPullResistance;
5 import com.pi4j.io.gpio.RaspiPin;
6 import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
7 import com.pi4j.io.gpio.event.GpioPinListenerDigital;
8
9
10
11 public class DetectMouv {
12
13 public static void main(String args[]) throws InterruptedException {
14
15 System.out.println("<--Pi4J Début--> ");
16
17 final GpioController gpio = GpioFactory.getInstance();
18
19 final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_01, PinPullResistance.PULL_DOWN);
20
21 myButton.addListener(new GpioPinListenerDigital() {
22 @Override
23 public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
24 System.out.println(" --> GPIO PIN ETAT CHANGE: " );
25 }
26
27 });
28
29
30
31 System.out.println("visualisation des détections ci-dessous ");
32
33 for (;;) {
34 Thread.sleep(500);
35 }
36 }
37
38 } |
ce code compile avec:
Code:
1 2
|
javac -cp .:./'*' DetectMouv.java |
et fonctionne avec
Code:
1 2
|
java -cp .:./'*' DetectMouv |
Cela donne le résultat suivant:
Code:
1 2 3 4 5
|
<--Pi4J Début-->
visualisation des détections ci-dessous
--> GPIO PIN ETAT CHANGE:
--> GPIO PIN ETAT CHANGE: |
Le fichier jar est créé comme suit:
Code:
1 2 3 4 5 6 7 8 9
|
jar cvmf MANIFEST.MF DetectMouv.jar DetectMouv.class pi4j*.jar
manifeste ajouté
ajout : DetectMouv.class(entrée = 1364) (sortie = 766)(compression : 43 %)
ajout : pi4j-core.jar(entrée = 170200) (sortie = 152466)(compression : 10 %)
ajout : pi4j-device.jar(entrée = 96553) (sortie = 77595)(compression : 19 %)
ajout : pi4j-gpio-extension.jar(entrée = 53402) (sortie = 48963)(compression : 8 %)
ajout : pi4j-service.jar(entrée = 17356) (sortie = 13754)(compression : 20 %) |
avec le MANIFEST.MF suivant
Code:
1 2 3 4
|
Manifest-Version: 1.0
Class-Path: pi4j-core.jar pi4j-device.jar pi4j-gpio-extension.jar pi4j-service.jar
Main-Class: DetectMouv |
Par contre, la commande :
Code:
1 2
|
java -jar DetectMouv.jar |
donne le message d'erreur suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<--Pi4J Début-->
Exception in thread "main" java.lang.NoClassDefFoundError: DetectMouv$1
at DetectMouv.main(DetectMouv.java:21)
Caused by: java.lang.ClassNotFoundException: DetectMouv$1
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more |
A titre d'info, voici le contenu du répertoire de travail
Code:
1 2 3 4 5 6 7 8 9 10
|
-rw-r--r-- 1 pi pi 679 juil. 8 05:25 DetectMouv$1.class
-rw-r--r-- 1 pi pi 1364 juil. 8 05:25 DetectMouv.class
-rw-r--r-- 1 pi pi 294584 juil. 8 05:28 DetectMouv.jar
-rw-r--r-- 1 pi pi 1061 juil. 8 05:11 DetectMouv.java
-rw-r--r-- 1 pi pi 130 juil. 8 05:06 MANIFEST.MF
-rw-r--r-- 1 pi pi 170200 juil. 8 02:27 pi4j-core.jar
-rw-r--r-- 1 pi pi 96553 juil. 8 02:27 pi4j-device.jar
-rw-r--r-- 1 pi pi 53402 juil. 8 02:27 pi4j-gpio-extension.jar
-rw-r--r-- 1 pi pi 17356 juil. 8 02:27 pi4j-service.jar |
Je ne vois pas ce que le fichier jar n'apprécie pas ligne 21 du code. Quelqu'un a-t-il une solution ?
merci d'avance.
PS:
problème sur un RPI (ARMv6-compatible processeurr rev 7 avec jdk 1.7.0_40 avec comme OS une RaspBian)
même comportement sur un pc core i7 avec jdk 1.8 et une Debian stable 64 bits à jour.