Jump to content

[JAVA] erreur java "import cannot be resolved" lors d'une compilation


pamputt

Recommended Posts

Bonjour, je suis en train d'essayer de compiler iMule sur une Mandriva 2010.2. Après avoir solutionné un premier problème, je tombe maintenant sur cette erreur de compilation.

/usr/bin/ccache gcj -I./libs/i2p -O2  -MT libs/i2p/i2prouter-I2PRouter.o -MD -MP -MF libs/i2p/.deps/i2prouter-I2PRouter.Tpo -c -o libs/i2p/i2prouter-I2PRouter.o `test -f 'libs/i2p/I2PRouter.java' || echo './'`libs/i2p/I2PRouter.java
libs/i2p/I2PRouter.java:16: error: The import net cannot be resolved
       import net.i2p.router.Router ;
              ^^^
libs/i2p/I2PRouter.java:17: error: The import net cannot be resolved
       import net.i2p.i2ptunnel.TunnelControllerGroup;
              ^^^
libs/i2p/I2PRouter.java:23: error: Router cannot be resolved
       Router.main(args);
       ^^^^^^
libs/i2p/I2PRouter.java:27: error: addressbook cannot be resolved to a type
       (new addressbook.DaemonThread ( addressbookpath ) ).start();
            ^^^^^^^^^^^
libs/i2p/I2PRouter.java:28: error: TunnelControllerGroup cannot be resolved
       TunnelControllerGroup.getInstance(); // have to call sth so that the class
       ^^^^^^^^^^^^^^^^^^^^^
5 problems (5 errors)
make[3]: *** [libs/i2p/i2prouter-I2PRouter.o] Erreur 1
make[3]: quittant le répertoire « /home/pamputt/Téléchargement/iMule-1.4.6-src/src »
make[2]: *** [all-recursive] Erreur 1
make[2]: quittant le répertoire « /home/pamputt/Téléchargement/iMule-1.4.6-src/src »
make[1]: *** [all-recursive] Erreur 1
make[1]: quittant le répertoire « /home/pamputt/Téléchargement/iMule-1.4.6-src »
make: *** [all] Erreur 2

Je ne connais absolument rien en java alors si quelqu'un aurait une idée pour solutionner ce problème.

Si ça peut aider, voici le contenu de I2PRouter.java

/**
*
*                   RUN Router alone
*
*/

import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.lang.Thread ;
import java.lang.Throwable;
import java.io.File;
import java.util.Properties;
import java.lang.InterruptedException;

import net.i2p.router.Router ;
import net.i2p.i2ptunnel.TunnelControllerGroup;

public class I2PRouter extends Thread
{
public static void main(String args[])
{
	Router.main(args);
	if (args.length>10)
	{
		String addressbookpath[] = {"addressbook"};
		(new addressbook.DaemonThread ( addressbookpath ) ).start();
		TunnelControllerGroup.getInstance(); // have to call sth so that the class
				// is compiled and stays in the binary
	}
}
}

Link to post
Share on other sites

Lol: j'ai vu sur Internet un gars qui a posté le même post mais en août 2008:

:mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2: :mdr2:

Ton erreur semble simple. Elle est ici:

> error: The import net cannot be resolved

Il te manque la librairie net Java

Il faut donc chercher la librairie net en Java.

Ensuite soit deux solutions

  1. Tu as une archive Jar (.jar): il faut la mettre avec les autres libraires Java (trouver où) :D
  2. Tu as des sources (.java): il faut mettre les sources à la racine à l'endroit du plantage
  3. Tu as du bytecode (.class): cela est très moche. Dans ce cas il faut faire une archive jar et regarder le pont 1) (Chercher la commande à lancer)

Un petit point sur le java: (Pour éclairer les 3 points ci-dessus)

Java te force à mettre ton code dans une librairie qui s'appelle un package.

Un exemple "package org.example.opengl;" <- cela doit toujours être la première ligne d'un fichier source Java (.java)

Ensuite pour appeler une librairie "import java.io.PrintWriter"

Mais là où je veux en venir, si tu fais ton Main dans le package "org.example.opengl", ton fichier Main.java va être dans le dossier "opengl", qui lui va être dans le dossier "example", qui lui va être dans le dossier "org", qui lui va être dans le dossier "src" :dd:

Et pareil pour le bytecode, mais dans le dossier "gen" au lieu de "src".

De plus le java va créer un fichier par classe que contient ton fichier source.

Exemple: ton fichier Main.java contient la classe Toto et la classe Main (<- Java te force toujours à avoir une classe qui a le même nom que ton fichier source sinon erreur (si je ne me trompe pas)), alors tu vas avoir un Main.class et un Main$Toto.class

Donc tout cela fait pleins de fichiers et une arborescence très développée (à la limite de l'énervement). C'est pour cela que le jar a été inventé: on met tout ce petit monde dans une archive Jar pour distribuer le bytecode (*), qui sera décompressé à la volée si nécessaire.

(*) Dans le Jar, les sources ne sont jamais mises. Par contre la décompilation de bytecode te redonne ton code en intégralité (je l'avais testé il y a longtemps et c'est flippant)

PS: Un expert pour me bananer :francais:

Link to post
Share on other sites

Pas grand chose à ajouter si ce n'est quelques remarques sur les propos de foetus ;)

- Main$Toto ne signifie pas que Toto est dans le fichier Main.java mais que c'est une classe interne à Main.

- On peut très bien mettre les sources dans un jar, c'est juste que ça n'est pas fait par défaut.

- Le compilateur compile là où tu lui dis. Sous Eclipse par défaut, c'est un répertoire bin. Mais tu peux aussi compiler chaque .class dans le répertoire du .java ou compiler ailleurs.

- Si tu ne mets pas les sources dans ton jar ni les informations de debug, tu ne pourras pas retrouver exactement le source de ton code. Tout dépend de comment tu génères ton jar. Après, un outil comme jad reste assez efficace.

Link to post
Share on other sites

Oui l'autre gars, c'est moi aussi. Je post à différents endroits pour avoir des avis différents ou des réponses plus rapides (par contre je n'oublie pas d'indiquer la réponse dans les autres forums si on me l'a donné ailleurs).

Donc concernant la bibliothèque "net" de java, je pense qu'elle existe sur mon système. J'ai un dossier net dans le répertoire /usr/include/libgcj-4.4.3/java qui contient ceci

total 212
-rw-r--r-- 1 root root 1713 2010-02-09 09:57 Authenticator.h
-rw-r--r-- 1 root root  595 2010-02-09 09:57 BindException.h
-rw-r--r-- 1 root root  615 2010-02-09 09:57 ConnectException.h
-rw-r--r-- 1 root root  631 2010-02-09 09:57 ContentHandlerFactory.h
-rw-r--r-- 1 root root  705 2010-02-09 09:57 ContentHandler.h
-rw-r--r-- 1 root root 1587 2010-02-09 09:57 DatagramPacket.h
-rw-r--r-- 1 root root 2634 2010-02-09 09:57 DatagramSocket.h
-rw-r--r-- 1 root root  641 2010-02-09 09:57 DatagramSocketImplFactory.h
-rw-r--r-- 1 root root 1865 2010-02-09 09:57 DatagramSocketImpl.h
-rw-r--r-- 1 root root  541 2010-02-09 09:57 FileNameMap.h
-rw-r--r-- 1 root root 3327 2010-02-09 09:57 HttpURLConnection.h
-rw-r--r-- 1 root root 1188 2010-02-09 09:57 Inet4Address.h
-rw-r--r-- 1 root root 1877 2010-02-09 09:57 Inet6Address.h
-rw-r--r-- 1 root root 2410 2010-02-09 09:57 InetAddress.h
-rw-r--r-- 1 root root 1311 2010-02-09 09:57 InetSocketAddress.h
-rw-r--r-- 1 root root 1416 2010-02-09 09:57 JarURLConnection.h
-rw-r--r-- 1 root root  640 2010-02-09 09:57 MalformedURLException.h
-rw-r--r-- 1 root root  910 2010-02-09 09:57 MimeTypeMapper.h
-rw-r--r-- 1 root root 1470 2010-02-09 09:57 MulticastSocket.h
-rw-r--r-- 1 root root  678 2010-02-09 09:57 NetPermission.h
-rw-r--r-- 1 root root 1388 2010-02-09 09:57 NetworkInterface.h
-rw-r--r-- 1 root root  658 2010-02-09 09:57 NoRouteToHostException.h
-rw-r--r-- 1 root root  794 2010-02-09 09:57 PasswordAuthentication.h
-rw-r--r-- 1 root root  671 2010-02-09 09:57 PortUnreachableException.h
-rw-r--r-- 1 root root  613 2010-02-09 09:57 ProtocolException.h
-rw-r--r-- 1 root root  932 2010-02-09 09:57 Proxy.h
-rw-r--r-- 1 root root  859 2010-02-09 09:57 ProxySelector.h
-rw-r--r-- 1 root root 1236 2010-02-09 09:57 ResolverCache.h
-rw-r--r-- 1 root root 2194 2010-02-09 09:57 ServerSocket.h
-rw-r--r-- 1 root root  564 2010-02-09 09:57 SocketAddress.h
-rw-r--r-- 1 root root  599 2010-02-09 09:57 SocketException.h
-rw-r--r-- 1 root root 3207 2010-02-09 09:57 Socket.h
-rw-r--r-- 1 root root  577 2010-02-09 09:57 SocketImplFactory.h
-rw-r--r-- 1 root root 1797 2010-02-09 09:57 SocketImpl.h
-rw-r--r-- 1 root root 1129 2010-02-09 09:57 SocketOptions.h
-rw-r--r-- 1 root root 1839 2010-02-09 09:57 SocketPermission.h
-rw-r--r-- 1 root root  670 2010-02-09 09:57 SocketTimeoutException.h
-rw-r--r-- 1 root root  634 2010-02-09 09:57 UnknownHostException.h
-rw-r--r-- 1 root root  655 2010-02-09 09:57 UnknownServiceException.h
-rw-r--r-- 1 root root 5328 2010-02-09 09:57 URI.h
-rw-r--r-- 1 root root  970 2010-02-09 09:57 URISyntaxException.h
-rw-r--r-- 1 root root 3117 2010-02-09 09:57 URLClassLoader.h
-rw-r--r-- 1 root root 4212 2010-02-09 09:57 URLConnection.h
-rw-r--r-- 1 root root  591 2010-02-09 09:57 URLDecoder.h
-rw-r--r-- 1 root root  678 2010-02-09 09:57 URLEncoder.h
-rw-r--r-- 1 root root 3176 2010-02-09 09:57 URL.h
-rw-r--r-- 1 root root  647 2010-02-09 09:57 URLStreamHandlerFactory.h
-rw-r--r-- 1 root root 1654 2010-02-09 09:57 URLStreamHandler.h
-rw-r--r-- 1 root root  816 2010-02-09 09:57 VMInetAddress.h
-rw-r--r-- 1 root root  572 2010-02-09 09:57 VMNetworkInterface.h
-rw-r--r-- 1 root root  803 2010-02-09 09:57 VMURLConnection.h

Comme je n'ai aucune idée de la forme que ça a, je peux me tromper mais si c'est bien ça, il faut que je dise à mon compilateur java de regarder dans ce répertoire. Comment je fais ça ?

Link to post
Share on other sites

Pas grand chose à ajouter si ce n'est quelques remarques sur les propos de foetus ;)

- Main$Toto ne signifie pas que Toto est dans le fichier Main.java mais que c'est une classe interne à Main.

- On peut très bien mettre les sources dans un jar, c'est juste que ça n'est pas fait par défaut.

- Le compilateur compile là où tu lui dis. Sous Eclipse par défaut, c'est un répertoire bin. Mais tu peux aussi compiler chaque .class dans le répertoire du .java ou compiler ailleurs.

- Si tu ne mets pas les sources dans ton jar ni les informations de debug, tu ne pourras pas retrouver exactement le source de ton code. Tout dépend de comment tu génères ton jar. Après, un outil comme jad reste assez efficace.

Mon "problème" c'est que je compile avec configure, make, make install et pas avec des trucs comme eclipse ou autre. Ou alors je ne sais pas comment adapter ce qu'on me dit concernant eclipse à mon cas.

Link to post
Share on other sites

J'y suis allé aussi, mais ça a l'air d'être une nouvelle version de la librairie avec des classes différentes.

A mon avis, il faut plutôt se poser la question : pourquoi Imule ?

Le projet a pas l'air très up to date ...

Y a-t-il une fonctionnalité qui n'existe pas dans les autres clients ?

Link to post
Share on other sites
  • 2 weeks later...

J'y suis allé aussi, mais ça a l'air d'être une nouvelle version de la librairie avec des classes différentes.

A mon avis, il faut plutôt se poser la question : pourquoi Imule ?

Le projet a pas l'air très up to date ...

Y a-t-il une fonctionnalité qui n'existe pas dans les autres clients ?

Si j'ai bien compris, ce n'est pas lMule, mais iMule, qui permet de faire du p2p sur le réseau i2p (donc du p2p anonyme, un peu comme freenet grosso modo).

Ca permet par exemple de ne pas se faire gauler par hadopi (ou pire, suivant les fichiers téléchargés).

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...