9
votes

Configuration Java ClassPath et Java_Home correctement à Ubuntu

Je reçois l'erreur

Exception dans le fil "Main" Java.Lang.NoclassDEffoundEfferror:

Quand j'essaie d'exécuter une classe compilée sur Ubuntu. J'utilise un exemple très simple helloworld et les millions de réponses qui existent déjà sur Internet suggèrent que mes variables de classe et de java_home ont été correctement définies.

Cependant, j'ai édité l'environnement etc / environnement aux bons dossiers ainsi que le dossier actuel:

chemin = ".: USR / local / sbin: / USR / local / bin: / usr / sbin: / usr / bin: / sbin: / USR / jeux"

java_home = "/ usr / lib / jvm / java-1.5.0-Sun /"

classe de classe = ".: / usr / lib / jvm / java-1.5.0-sun / lib"

Et ils apparaissent lorsque je saisie la commande définie. Dans tous les cas, même lorsque je réglais la classe de classe en utilisant manuellement

sudo java -cp. myfirstjavaprog.class

Je reçois la même erreur. Où devrais-je regarder? Cela doit être un problème de configuration.

Merci beaucoup


8 Réponses :


6
votes

Vous voulez laisser tomber le .class de la fin. Tapez simplement ...

java -cp . myfirstjavaprog


1 commentaires

Je suis tellement déprimé que je n'ai pas tapé ceci.



1
votes

Non, je pense que c'est que les variables d'environnement de classe sont ignorées.

La bonne façon de le faire est d'utiliser l'option -ClassPath lorsque vous compilez et exécutez. Définissez-le pour chaque projet. La preuve que vous avez avant vos yeux vous dit que c'est tellement.

Pourquoi la classe est-elle ignorée? Plusieurs raisons:

  1. C'est un artefact Java 1.0 qui est tombé de la faveur.
  2. Le JVM n'a aucune garantie que vous avez définie une comme une variable d'environnement.
  3. IDES ont leurs propres besoins, de sorte qu'ils ne comptent pas dessus.
  4. Les serveurs d'applications Java EE ont leurs propres exigences. Ils ne comptent donc pas dessus.
  5. Vous devez donner tout le chemin à chaque fois parce que chaque projet sera probablement différent. Une fois que vous avancez «Bonjour, World», vous vous retrouverez à la scripter ou à utiliser des outils tels que ANT et Maven qui vous aidera à définir la classe de classe pour votre projet.

5 commentaires

Ce sera une mauvaise idée .. Parce que chaque fois qu'il doit donner le chemin complet


Pourquoi les variables d'environnement de classe de classe sont-elles ignorées?


@lakshamanan - faux. Il devra apprendre à le faire de manière appropriée pour les projets futurs, qui ne sont probablement pas compilés et exécutés sur la ligne de commande.


Cette réponse est comme de l'or. Cependant - les personnes de DOS sont vissées. 255 lignes de commande de caractères. Merci encore, Bill!


Le but est que personne n'utilise des coquilles de commande pour compiler ou courir quelque chose de significatif une fois qu'ils passent «Bonjour, World» et des tutoriels. Ce n'est pas presque le problème que vous sortez d'être. Les applications du bureau utilisent des scripts et des fourmi; Les applications déployées utilisent les conventions intégrées. Si c'était un si gros problème, Java se serait éteint il y a des années.



0
votes

Pour définir Java_Home variable, voici les instructions.

http://luckydev07.blogspot.com /2009/08/setting-javahome-in-ubuntu-linux.html

et

classe de classe peut être défini de la même manière


1 commentaires

Ces variables ont été définies, mais elles sont ignorées pour une raison quelconque. Je dois avoir une sorte de problème de syntaxe.



0
votes

Je vous recommanderais vivement de passer du temps à regarder sur le tutoriel du soleil. Cela vous aidera plus tard - les chemins de classe sont des fautes de troubles notoires.

http://java.sun.com/docs/books /Tutorial/getStarted/toc.html


0 commentaires

5
votes

Je recommande vivement de vous débarrasser de la variable d'environnement de classe de classe, ou du moins à la sortie de votre JRE / JDK.

"." est implicitement dans la classe de classe sauf indication contraire. Et comme à propos de Java 1.3, Java a été suffisamment intelligente pour trouver son propre runtime et ses bibliothèques basées sur le chemin d'exécution des exécutables Javac / Java. Depuis lors, il a été redondant, sinon difficile, de spécifier ceux de la classe de classe. Certainement ... / lib est incorrect, car il n'y a que des bocaux là-bas, aucune classe, et ceux qui ne sont pas choisis de la classe de classe s'ils ne sont pas individuellement et explicitement nommés.

Les Javas modernes sont suffisamment intelligents pour que vous puissiez simplement taper java lorsque vous vous tenez dans le répertoire racine de la classe de classe, et cela fonctionnera simplement ™.


6 commentaires

Vous avez tout à fait raison, cela révèle que le problème était que lorsque j'essaie de compiler tout ce qui importe des composants de balançoire, il donne exactement la même erreur. Alors que l'exemple helloworld.java est bien ... Cela semble bizarre.


Oh ... Notez que Windows est expédié par défaut avec un java mal criblé, avec des exécutables assis dans le système de classe Windows System. Veuillez faire "Java -Version" à partir d'une invite DOS et voyez si la version de Java que vous utilisez est la version souhaitée!


la même chose peut être dit de Ubuntu; Parce qu'il navère avec le Java GNU, (au moins le couple de systèmes Ubuntu que j'ai vu), pas le Java de Sun Sun. 'K, ce n'est pas "mal criblé" - mais ce n'est pas le Java de Sun.


Je suis upvotant B / C Il n'y a pas beaucoup de choses à propos de "définir Java ClassPath" sur Google. J'étais sous l'impression erronée que vous aviez besoin de configurer la classe de classe ... mais j'avais tort.


Qu'en est-il de Java_Home ... avez-vous toujours besoin de configurer cette variable de chemin?


@Trevor: quelques outils aiment le voir; Je semble me souvenir de tomcat et de fourmi être parmi ceux-ci. Mais même ceux-ci parviennent à faire sans, et dans le cas «normal», vous ne devriez pas en avoir besoin.



1
votes

Vous mélangez des pommes et des oranges. Une invocation Java RAW ou Javac sur la ligne de commande nécessite une classe de classe pour savoir où il peut accéder à ses classes. Lorsque vous exécutez

java -cp $CLASSPATH MyClass


0 commentaires

0
votes

OK, je cherchais le problème au mauvais endroit. Il s'est avéré que Java était bien et j'étais la victime d'avoir la même erreur pour deux problèmes distincts.

J'essayais à l'origine de courir un exemple de swing que j'ai obtenu du site Web Java, mais je n'avais pas remarqué qu'il avait une définition de paquet. J'ai configuré la structure de dossiers correcte et il fonctionne maintenant bien.

Lorsque j'ai essayé d'exécuter un exemple de helloworld, j'avais accidentellement inclus l'extension .Class.

Ces deux problèmes m'ont donné des erreurs de classe de classe.

Merci beaucoup pour toute votre aide.


0 commentaires

1
votes

Utilisez

sudo update-java-alternatives -s java-6-openjdk


0 commentaires