2009-06-03 18 views
6

Tengo un archivo ejecutable que tiene un archivo de clase con un valor incorrecto. Solicité ese archivo del autor y corregí el valor.Vuelva a compilar una clase Java desde Jar

Ahora quiero compilarlo y agregar el archivo de clase compilado en el jar y ejecutarlo.

No es sorprendente que obtenga múltiples errores "no se puede encontrar el símbolo" para las referencias de objetos personalizados que se encontraban en el archivo jar.

traté de compilar el archivo haciendo referencia al archivo JAR en la ruta de clase como tal

 
C:/> javac file.java -classpath C:/folder/where/jar/is 

pero esto no se parece a trabajar ... consigo los mismos errores como si sólo hacer

 
C:/> javac file.java 

¿Hay alguna manera de compilar esta clase individual de alguna manera haciendo referencia a los otros archivos en el contenedor?

Gracias.


errores que estoy recibiendo mientras que después de algunas de las siguientes sugerencias aquí:

 
javac -classpath C:/jar/location.jar File.java 

File.java:226: cannot find symbol 
symbol : class Stuff 
location: class com.shared.stuffers 
           Stuff s1 = new Stuff(); 
              ^

clase de cosas se encuentra en el tarro, pero no puede ser visto por el programa javac ... me siento como Estoy haciendo algo mal, pero no estoy seguro de dónde? Gracias.

+1

bushman, you hacker! ¿Qué autor le daría el código fuente, en lugar de volver a compilar todo para usted? – Cheeso

+0

Cheeso, para responder a su pregunta Q? - autor que quiere que su código esté bajo cirugía -> pero estoy lejos de ser un pirata informático, pero no me importa la piratería –

Respuesta

0

es probable que tenga que especificar el archivo JAR en sí y no sólo el directorio que reside en

javac file.java -classpath C:\folder\where\jar\is\the_jar_file.jar 
+0

hmm ... parece que no lo arregla ... ¿los errores siguen ahí? –

+1

Whoops, orden incorrecta. Por la presente recomiendo la respuesta del Sr. Will. –

16

Usted tendrá que compilar el archivo de esta manera:.

javac -classpath C:\folder\where\jar\is\the_jar_file.jar file.java 

por el uso javac instrucciones:

C:\Console2>javac -help 
Usage: javac <options> <source files> 
+0

Gracias por su sugerencia --- pero el problema persiste :( –

+2

Falta el directorio base (.). El comando debe ser javac -classpath.; C: \ carpeta \ donde \ jar \ es \ el_jar_file.jar archivo.java – mjn

0

Sólo estoy adivinando, pero ¿comprobaron si no necesita ningún j externo ¿Qué bibliotecas puede incluir en su comando de compilación? Otra cosa que podría hacer es compilar todas las clases haciendo algo como

javac *.java ... 
9

Una vez que ha compilado el nuevo archivo (como en la respuesta del Sr. Will), puede agregar el nuevo archivo a la jarra usando:

jar uf C:\folder\where\jar\is\the_jar_file.jar file.class 
+0

usted lo vi venir :) – Manav

0

Como han mencionado otros, una vez que tenga el archivo .class vuelve a compilar es necesario sustituir la versión anterior en el .jar

lo más probable es necesario tener ninguna dependencia de tiempo de compilación a disposición reconstruir esta clase Si se trata de un proyecto de código abierto, esto podría ser algo fácil de lograr. Si no, es más difícil. Si el autor le envió el archivo, probablemente también lo ayude con esto. Es posible que también pueda conseguir que el autor produzca una distribución de parches para usted. Las probabilidades son que él/ella ya tiene el entorno de compilación configurado y esto debería ser relativamente fácil de hacer.

0

que iba a tratar este enfoque (y debería funcionar, a menos que la clase 'depurado' no introduce un nuevo error):

  1. crear un nuevo frasco mediante la adopción de la vieja uno y eliminación de la archivo de clase que desea reemplazar
  2. compilar el archivo java corregido y asegúrese de que el frasco modificada está en la ruta de clase
  3. agregar el recién compilado archivo de clase a la jarra

Esto debería funcionar. De lo contrario, solicite al autor una nueva biblioteca completa.

Cuestiones relacionadas