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:
ce code compile avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }
et fonctionne avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2javac -cp .:./'*' DetectMouv.java
Cela donne le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2java -cp .:./'*' DetectMouv
Le fichier jar est créé comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <--Pi4J Début--> visualisation des détections ci-dessous --> GPIO PIN ETAT CHANGE: --> GPIO PIN ETAT CHANGE:
avec le MANIFEST.MF suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 %)
Par contre, la commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4Manifest-Version: 1.0 Class-Path: pi4j-core.jar pi4j-device.jar pi4j-gpio-extension.jar pi4j-service.jar Main-Class: DetectMouv
donne le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 java -jar DetectMouv.jar
A titre d'info, voici le contenu du répertoire de travail
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Je ne vois pas ce que le fichier jar n'apprécie pas ligne 21 du code. Quelqu'un a-t-il une solution ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager