2011-07-06 78 views
10

Tengo un archivo miarchivo.jar. Utilizo jd-gui para descompilar toda * .class en una carpeta en myfile.jar. Obtengo muchos archivos * .java en muchas carpetasVuelva a compilar a * .Jar ¿Después de descompilar y corregir el código?

Después de corregir algunos códigos en algunos * .java, ahora me gustaría recompilar todos * .java de vuelta a * .class, y empacar toda la carpeta nuevamente en myfile.jar .

¿Cómo puedo hacer esto?

(Esta es mi primera vez jugando con el código de Java.)

+0

Además, asegúrese de que en realidad es legal hacer algo como esto en su lugar de residencia (respectivamente según la licencia que acordó cuando obtuvo el archivo jar). –

+0

Muchas gracias por su ayuda, esta es solo la aplicación gratuita, que traté de corregir algún error. – sandy

+2

POR QUÉ LA GENTE DOWNVOTE. CRAZIES –

Respuesta

1

En general, para compilar código Java en las clases que necesita el ejecutable javac que viene con el JDK.

Unix:

${JAVA_HOME}/bin/javac -d OUTPUT_DIRECTORY SOURCE_FILES 

de Windows:

%JAVA_HOME%\bin\javac.exe -d OUTPUT_DIRECTORY SOURCE_FILES 

Una vez que ha compilado el código, puede crear el frasco (que es un archivo zip que contiene todas las clases y algunos meta- datos sobre el creador, versión, ... etc.).

${JAVA_HOME}/bin/jar cf output.jar INPUT_FILES 

Puede leer más sobre las diferentes opciones que puede utilizar con javac y jar. Usar una herramienta como hormiga facilita la compilación del código fuente y la creación de jarras. Consulte las tareas javac y jar.

+0

gracias, ¿qué comando javac puedo usar para compilar múltiples * .java a * .class incluye el de las subcarpetas? – sandy

+0

@sandy: usa comodines de shell, como en mi respuesta. –

8

Necesita un Java Development Kit (JDK). Esto incluye un compilador de Java (normalmente llamado javac) y un archivador jar.

Asumiendo que tienen los archivos de Java en un nombre de directorio src (a continuación, de acuerdo con su estructura de paquetes), se usaría

javac -d classdir -sourcepath src src/*.java src/*/*.java src/*/*/*.java ... 

para compilar todos los archivos. (Ajuste la cantidad de * a la cantidad de niveles de directorio. Si solo tiene algunas carpetas con archivos fuente en ellas, también puede listarlas individualmente. Si algunas clases dependen de otras, puede omitir las otras, el compilador encontrará y compilarlos automáticamente.)

Si el programa necesita bibliotecas externas, proporcione un argumento -classpath.

Ahora tenemos todas las clases compiladas en el directorio classdir. Mire en su archivo jar original: cualquier archivo que no pertenezca a la clase debería copiarse en su dir de clase (en el mismo directorio relativo que tenían antes). Esto incluye notablemente META-INF/MANIFEST.MF.

A continuación, creamos un nuevo archivo jar a partir de estos. La herramienta jar está incluida en el JDK.

jar cfm mypackage.jar classdir/META-INF/MANIFEST.MF -C classdir . 

(también puede simplemente utilizar un programa de compresión de su confianza y cambiar el nombre del archivo zip resultante a .jar. Si los archivos tienen nombres que no son ASCII, asegúrese de establecer la codificación de nombre de archivo a UTF-8.)

Cuestiones relacionadas