2009-04-12 22 views
5

J'ai téléchargé le paquet Javax.mail. J'ai jdk1.6.0_11. Le problème est ... Je ne peux pas obtenir javac ou java pour trouver ces classes! Je peux obtenir des applications pour compiler en utilisant JCreator LE (en ajoutant le pot de courrier à sa liste de recherche) mais, quand j'essaye d'exécuter l'application dans une fenêtre de commande, échoue. Puis-je ajouter ces nouvelles classes à rt.jar sans avoir besoin de pour endommager mon installation jdk? Je sais que java l'a branché pour y chercher des cours. (Et, les classes de courrier sont à l'intérieur d'un paquet javax - semble comme ils pourraient raisonnablement être ajoutés au dossier javax dans rt.jar ..Puis-je ajouter des classes au fichier rt.jar de sun?

Merci Phil D »

+3

pourquoi ce bas-voté? –

+0

Parce que le piratage du JDK n'est jamais une bonne pratique, vous pouvez plutôt pirater le JRE sans compromettre l'environnement de développement –

+3

Alors mettez cela dans une réponse. Cela ne veut pas dire que c'est une mauvaise question. –

Répondre

3

Non, vous ne pouvez pas , vous ne devriez pas.

au lieu de cela, comprendre le problème avec votre classloader (probablement des chemins?). vous en aurez besoin pour la prochaine bibliothèque que vous avez besoin d'accéder.

Messing avec rt.jar signifie que vous pouvez ne fonctionne sur aucune autre machine JVM

2

Vous devez spécifier le fichier jar dans votre chemin de classe: de préférence sur la ligne de commande avec l'option -cp, mais éventuellement avec la variable d'environnement CLASSPATH. Vous pouvez également spécifier le répertoire dans la propriété système java.ext.dirs. Pour plus de détails, voir le documentation for the extensions mechanism. Vous ne devriez pas vous tromper avec rt.jar. C'est très certainement pas la façon de rendre les fichiers jar supplémentaires disponibles - c'est comme essayer d'ajouter Microsoft Word au noyau Windows;)

+0

Votre deuxième suggestion a cliqué avec moi! Je préfère enregistrer le pot d'une manière permanente, que d'avoir à le spécifier plus et plus dans le cadre de l'option -classpath. Merci! Phil – javaphild

+0

En passant ... J'ai mis le javamail .jar dans le répertoire java.ext, et cela a parfaitement fonctionné. Une solution efficace très simple. Ma ext est c: \ program files \ java \ jdk1.6.0_11 \ jre \ lib \ ext – javaphild

0

Certainement non. Si vous publiez la commande que vous exécutez à partir de la ligne de commande, nous serons en mesure de vous orienter dans la bonne direction, mais vous manquerez probablement un paramètre classpath.

java -classpath /path/to/mail.jar MyClass

1

Ajout de choses à rt.jar semble être une mauvaise idée, même si il est possible et facile à accomplir.

Essayez de compiler votre application à partir de la ligne de commande comme ceci:

javac -cp <path_to_3rd_libs>/jarfile.jar . MainClass.java 

Si le compilateur se plaint encore du paquet javax.mail essayer de déballer/examiner le fichier jar pour voir ce paquet de javax.mail (et son contenu attendu) est là.

(Sur les fenêtres il est facile d'examiner un fichier jar en utilisant 7zip.)

+0

> (Sur les fenêtres il est facile d'examiner un fichier jar en utilisant 7zip.) Utilisez tout ce qui peut parcourir les fichiers zip sur n'importe quelle plateforme, ce n'est pas une fonctionnalité de 7zip. – Fredrik

+0

gah, oublié les commentaires sur stackoverflow en ignorant les nouvelles lignes ... désolé pour cela. – Fredrik

0

Vous devez comprendre le concept CLASSPATH qui vous permet d'ajouter des classes individuelles et les fichiers jar contenant les classes à l ' « univers » des classes définies disponibles pour le code que vous voulez compiler et/ou exécuter. Il est similaire dans l'idée à la variable PATH dans le monde de Windows.

Pour la ligne de commande Windows, c'est la documentation:

http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html

Java Tutorial m'a surpris de ne pas être bien écrit pour ce concept particulier:

http://java.sun.com/docs/books/tutorial/essential/environment/paths.html

Vous les plus probablement besoin de quelque chose le long des lignes:

C:> set CLASSPATH = c: \ Javamail \ first.jar; c: \ javamail \ second.jar

après quoi les deux java et javac devraient connaître ces classes