2009-04-12 10 views
5

Descargué el paquete Javax.mail. Tengo jdk1.6.0_11. El problema es ... ¡No puedo obtener javac o java para encontrar esas clases! Puedo obtener aplicaciones para compilar utilizando JCreator LE (agregando el jar de correo a su lista de búsqueda) pero, cuando intento ejecutar la aplicación en una ventana de comandos, falla.¿Puedo agregar clases al archivo rt.jar de sun?

¿Puedo agregar estas nuevas clases al rt.jar sin lastimando mi instalación de jdk? Sé que java lo tiene conectado para buscar allí las clases. (Y, las clases de correo están dentro de un paquete javax - parece como que razonablemente podrían añadirse a la carpeta javax en rt.jar ..

Gracias Phil D'

+3

qué fue votado abajo esto? –

+0

Porque piratear el JDK nunca es una buena práctica, más bien puedes hackear el JRE sin comprometer el entorno de desarrollo –

+3

. Así que ponlo en una respuesta. No significa que sea una mala pregunta. –

Respuesta

3

No, no puede , ni debería hacerlo.

en su lugar, averiguar el problema con su cargador de clase (probablemente caminos?). tendrá que para la próxima biblioteca necesita acceder.

Messing con rt.jar significa que puede No se ejecuta en ninguna otra JVM.

2

Debe especificar el archivo jar en su classpath: preferentemente en la línea de comando con la opción -cp, pero posiblemente con la variable de entorno CLASSPATH.

O bien, puede especificar su directorio en la propiedad del sistema java.ext.dirs. Para obtener más información, consulte documentation for the extensions mechanism.

No debería estar jugando con rt.jar. Definitivamente es no la forma de hacer que los archivos jar adicionales estén disponibles - es similar a intentar agregar Microsoft Word al núcleo de Windows;)

+0

¡Su segunda sugerencia me ha hecho clic! Preferiría registrar el jar de alguna manera permanente, que tener que especificarlo una y otra vez como parte de la opción -classpath. ¡Gracias! Phil – javaphild

+0

Por cierto ... puse javamail .jar en el directorio java.ext, y funcionó a la perfección. Una solución efectiva muy simple. Mi directorio ext era c: \ archivos de programa \ java \ jdk1.6.0_11 \ jre \ lib – javaphild

0

Definitivamente no. Si publica el comando que está ejecutando desde la línea de comandos, podremos orientarlo en la dirección correcta, pero es muy probable que le falte un parámetro classpath.

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

1

añadir cosas a rt.jar parece una mala idea, a pesar de su posible y fácil de lograr.

Trate de compilar la aplicación desde la línea de comandos de la siguiente manera:

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

Si el compilador todavía se queja sobre el paquete javax.mail tratar de descomprimir/examinar el archivo jar de ver que el paquete javax.mail (y su contenido esperado) está ahí.

(en Windows es fácil de examinar un archivo JAR utilizando 7zip.)

+0

> (En Windows es fácil examinar un archivo jar usando 7zip.) Use cualquier cosa que pueda explorar archivos zip en cualquier plataforma, no es una característica de 7zip. – Fredrik

+0

gah, se olvidó de los comentarios en stackoverflow ignorando nuevas líneas ... lo siento por eso. – Fredrik

0

Es necesario comprender el concepto CLASSPATH, que le permite añadir clases individuales y archivos JAR que contiene las clases para el "universo" de las clases definidas disponibles para el código que desea compilar y/o ejecutar. Es similar en idea a la variable PATH en el mundo de Windows.

Para la línea de comandos de Windows Esta es la documentación:

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

El Tutorial de Java me sorprendió al no estar bien escrito para este concepto en particular:

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

Lo más probablemente necesite algo similar a lo siguiente:

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

después de lo cual tanto java y javac debe saber acerca de estas clases

Cuestiones relacionadas