Otro

Mac ¿Cómo modificar un archivo java .jar?

D

Dudleybrooks

Poster original
4 de abril de 2011
San Francisco
  • 14 de abril de 2011
Necesito hacer una modificación simple en una aplicación (Thunderbird.app): cambiar una sola línea en un archivo .jar. En mi vieja computadora con Windows, sabía qué software usar. ¿Cuál es la forma más fácil en Snow Leopard de abrir, modificar y guardar el archivo .jar en la aplicación? Preferiblemente usando cosas que están integradas en el sistema operativo; si no es así, ¿usa software gratuito?

Jiminaus

16 de diciembre de 2010


Sydney
  • 15 de abril de 2011
Un archivo .jar es solo un archivo .zip con una extensión diferente (y un diseño estándar / predefinido). Puede usar los programas estándar zip y descomprimir en / usr / bin para cambiar un archivo .jar, asumiendo que no está firmado.

'Cambiar una sola línea en un archivo .jar' no tiene sentido directamente en el contexto del archivo .jar. Si nos dice exactamente qué quiere hacer con ese archivo .jar, es posible que podamos decirle qué herramientas / programas de Mac OS X puede usar y cómo. METRO

muflón

Sep 15, 2006
  • 15 de abril de 2011
Publicada de forma inalámbrica (Mozilla / 5.0 (iPhone; U; CPU iPhone OS 4_2_1 como Mac OS X; sv-se) AppleWebKit / 533.17.9 (KHTML, como Gecko) Versión / 5.0.2 Mobile / 8C148 Safari / 6533.18.5)

En realidad, hay tres fases: extracción, modificación y ensamblaje.

Extraer es fácil: haga clic con el botón derecho y haga clic en Desarchivar (afaik).

Modificación: si es el manifiesto (qué clase se ejecuta, etc.) entonces es fácil, sin embargo, los archivos java se compilan en archivos .class y deberán desmontarse antes de modificarlos.

Para juntar todo, busque en Google el comando 'jar' para la terminal.

Si es FOSS, es mejor y más fácil de compilar desde la fuente; si no, no creo que sea 100% legítimo. D

Dudleybrooks

Poster original
4 de abril de 2011
San Francisco
  • 15 de abril de 2011
Necesito cambiar una línea en un archivo .js contenido en el archivo .jar. Pero tu respuesta aclara mi pregunta:

Hice este cambio muchas, muchas veces en Windows (es decir, cada vez que descargué una actualización, que, por supuesto, borró mi cambio anterior). La persona que recomendó el cambio también recomendó un (des) archivador llamado IZArc, en el que todo el proceso podría realizarse desde dentro de IZArc: abrir (desarchivar) el archivo .jar, buscar el archivo .js, editar la línea ... y luego hacer clic en Salir devolverá todo a su estado de archivo.

Entiendo que puedo desarchivar el .jar con cualquier desarchivador y editar el .js con cualquier editor de texto. Supongo que mi preocupación es que, al no ser programador, podría hacer algo dañino al volver a archivar: no archivar todos los archivos relevantes, o archivar demasiados archivos, o algo así.

Entonces, mi pregunta es: ¿Existe un archivador (con suerte en el sistema operativo) que hará todo lo anterior desde dentro, para que yo sepa que el archivo .jar final contiene exactamente los archivos que debería contener? O, en su defecto, ¿qué debo hacer para asegurarme de que lo he vuelto a archivar correctamente? Me doy cuenta de que en este foro esta es una pregunta completa para principiantes.

notjustjay

Sep 19, 2003
Canadá, ¿eh?
  • 15 de abril de 2011
Bueno, si los archivos .jar son simplemente archivos ZIP con una extensión diferente, entonces puede comprimirlos y descomprimirlos libremente desde la Terminal usando los comandos 'zip' y 'unzip'.

chown33

Moderador
Miembro del equipo
9 de agosto de 2009
el plano abismal
  • 15 de abril de 2011
notjustjay dijo: Bueno, si los archivos .jar son simplemente archivos ZIP con una extensión diferente, entonces puede comprimirlos y descomprimirlos libremente desde la Terminal usando los comandos 'zip' y 'unzip'.

O use el comando 'jar', que está escrito expresamente para este propósito, y mantiene el orden correcto para los manifiestos (que normalmente debe residir como la primera entrada, o como máximo una de las primeras).

Estoy bastante seguro de que el comando jar está instalado de forma predeterminada. Esto también debería seguir siendo cierto en 10.7 Lion.
Reacciones:abronsdilan

notjustjay

Sep 19, 2003
Canadá, ¿eh?
  • 15 de abril de 2011
chown33 dijo: O use el comando 'jar', que está escrito expresamente para este propósito, y mantiene el orden correcto para los manifiestos (que típicamente debe residir como la primera entrada, o como máximo una de las primeras).

Estoy bastante seguro de que el comando jar está instalado de forma predeterminada. Esto también debería seguir siendo cierto en 10.7 Lion.

Ah, incluso mejor. Gracias, no sabía nada de eso.

pilotError

12 de abril de 2006
Isla Grande
  • 15 de abril de 2011
O puede usar el comando jar. Los parámetros son como las utilidades zip de la línea de comandos

$ jar -xvf jarfile.jar ** Extrae los archivos

** editar el archivo **

$ jar -cvf jarfile.jar ** Crea el nuevo archivo Jar
Reacciones:abronsdilan D

Dudleybrooks

Poster original
4 de abril de 2011
San Francisco
  • 15 de abril de 2011
Gracias. El método de PilotError fue sencillo y exitoso: sin errores de software, errores de novatos o incluso errores de piloto. Pero todavía tenía más pasos de los que solía necesitar en Windows: cambiar de Terminal después de desarchivar, al escritorio para usar un editor (mi culpa, es cierto, por no conocer los editores de Unix a los que supongo que Terminal tiene acceso) , luego de vuelta a la Terminal para volver a archivar, además de las pulsaciones de teclas necesarias para los comandos de Unix. Todavía me gustaría encontrar un editor que lo haga * todo * dentro de un programa, como lo hizo IZArc en Windows: ctrl-open, edit, ctrl-close - zip-zip (juego de palabras).

chown33

Moderador
Miembro del equipo
9 de agosto de 2009
el plano abismal
  • 15 de abril de 2011
dudleybrooks dijo: Gracias. El método de PilotError fue sencillo y exitoso: sin errores de software, errores de novatos o incluso errores de piloto. Pero todavía tenía más pasos de los que solía necesitar en Windows: cambiar de Terminal después de desarchivar, al escritorio para usar un editor (mi culpa, es cierto, por no conocer los editores de Unix a los que supongo que Terminal tiene acceso) , luego de vuelta a la Terminal para volver a archivar, además de las pulsaciones de teclas necesarias para los comandos de Unix. Todavía me gustaría encontrar un editor que lo haga * todo * dentro de un programa, como lo hizo IZArc en Windows: ctrl-open, edit, ctrl-close - zip-zip (juego de palabras).

No conozco ninguna herramienta que lo haga todo. Francamente, esta es la primera vez que veo a alguien preguntar cómo editar un archivo dentro de un frasco en Mac OS, así que supongo que no hay un gran mercado objetivo.

Puede pegar líneas de comando en la Terminal, así que simplemente guarde los comandos en un archivo de texto, luego cópielos y péguelos. No es necesario escribir.

Esto es aproximadamente lo que guardaría en el archivo de texto:
Código: jar -xvf jarfile.jar ## Extracts the files open -e path/to/fileYouWantToEdit.itsExtension jar -cvf jarfile.jar ## Create the new Jar file Obviamente, debería cambiar jarfile.jar al archivo jar real que tiene.

He mostrado ## porque esos son el carácter de comentario real para bash.

También he mostrado un comando 'open -e' con un nombre de ruta que tendrá que sustituir. El -e abierto abrirá el archivo nombrado en TextEdit.app. Si tiene otro editor que prefiera en su lugar, puede decirle a 'abrir' que lo use en su lugar. Aquí está la página de manual del comando 'abrir':
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/open.1.html
Mire las opciones -a y -b en particular.

Finalmente, puede poner otros comandos allí, como un 'cd someDir' o cualquier otra cosa que desee.

Probablemente podría escribir un script 'sed' para hacer el reemplazo, por lo que no tendría que editar manualmente el archivo. Luego, podría convertir todo en un script de shell, envolverlo en un AppleScript y guardarlo como una gota. Luego, en el futuro, simplemente coloque su aplicación original en la gota de AppleScript y hará todos los cambios automáticamente. Sin embargo, tendrías que escribir y depurar todas esas cosas, y probablemente tomaría horas más que simplemente copiar y pegar cuando la aplicación se actualice.

Si el cambio en el jar es algo que el proveedor debería proporcionar, probablemente debería presentar un informe de error contra la aplicación. Porque la solución más limpia es no tener que arreglarlo usted mismo.

pilotError

12 de abril de 2006
Isla Grande
  • 15 de abril de 2011
En Windows, puede usar programas como pkzip o winzip que muestran el contenido en la ventana y puede simplemente hacer doble clic en un archivo que luego se extrae bajo el capó y se envía al programa asociado (editor).

Hay utilidades zip en OS X, pero es cierto que no uso OS X como uso Windows. Estoy seguro de que podría rastrear uno de los programas que le permitirá hacer lo mismo, pero para lo que se necesitaba aquí, no valía la pena buscarlo. D

Dudleybrooks

Poster original
4 de abril de 2011
San Francisco
  • 16 de abril de 2011
PilotError y Chown33: Estoy seguro de que tiene razón sobre la falta de mercado en OS X.

Chown33: Gracias por el consejo sobre la automatización y los detalles involucrados. Yo los probaré. Dios mío, ¡podría convertirme en programador!

Es algo * creo * que debería arreglarse, pero no es un error: Thunderbird tiene una función de búsqueda avanzada para direcciones de correo electrónico, que pueden devolver varias direcciones. Si hace clic en Escribir, los coloca todos en los campos 'Para' (sin otra opción). El cambio hace que los coloque en los campos 'BCC', para una mejor etiqueta de red. TB 1.x solía tener esta opción, pero la perdió en 2.x. PAG

peregin55

Feb 25, 2008
  • 8 de mayo de 2011
Emacs hará lo que quieras

En Linux y Mac OS X utilizo emacs para editar archivos dentro de un jar. Sólo tipo:

emacs somejar.jar

Luego puede navegar por todos los archivos en el jar, abrir, guardar, lo que sea usando los comandos estándar de emacs. Cualquier cambio que realice se aplicará automáticamente al frasco (no es necesario abrir nada manualmente)
Reacciones:abronsdilan D

Dudleybrooks

Poster original
4 de abril de 2011
San Francisco
  • 8 de mayo de 2011
¡Gracias!

peregin55

Es bueno saberlo.

--
Dudley B

gran desastre

14 de enero de 2010
  • 8 de junio de 2012
argh. no funciona Necesito reemplazar algunas cadenas en los archivos .class (uso exactamente la misma cantidad de símbolos), luego trato de volver a empaquetarlo con el comando jar, pero el archivo resultante es unos bytes más pequeño que el inicial, y cuando intentar instalarlo en mi móvil dice 'formato jar incorrecto'.
¿Algunas ideas?

TopHatProductions115

22 de agosto de 2016
  • 10 de noviembre de 2016
pilotError dijo: O puede usar el comando jar. Los parámetros son como las utilidades zip de la línea de comandos

$ jar -xvf jarfile.jar ** Extrae los archivos

** editar el archivo **

$ jar -cvf jarfile.jar ** Crea el nuevo archivo Jar


¿Funcionará esto para archivos java firmados?

Michaelwarne

11 de noviembre de 2016
  • 11 de noviembre de 2016
Puede usar el editor de vim para editar los archivos en cualquier archivo de texto comprimido.
  1. Navegue a la ubicación del archivo desde la terminal.
  2. Escriba vim name.jar
  3. Seleccione el archivo que desea cambiar y presione Enter
  4. Edite el archivo y presione Esc y: wq! para ahorrar y salir.
Espero que esto ayude.

okieiam

17 de diciembre de 2016
  • 18 de diciembre de 2016
sí, yo también, solía usar 7zip para editar classpath en el archivo jar en Windows J

jtara

Mar 23, 2009
  • 21 de diciembre de 2016
Si necesita modificar thunderbird.app, use el código fuente, realice el cambio y compílelo.

https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions C

Clovr

13 de noviembre de 2018
  • 13 de noviembre de 2018
michaelwarne dijo: Puede usar el editor vim para editar los archivos en cualquier archivo de texto comprimido.
  1. Navegue a la ubicación del archivo desde la terminal.
  2. Escriba vim name.jar
  3. Seleccione el archivo que desea cambiar y presione Enter
  4. Edite el archivo y presione Esc y: wq! para ahorrar y salir.
Espero que esto ayude.
¿No podemos automatizar esto usando un bash? Sería de mucha ayuda si se iluminara a través de él.
Reacciones:abronsdilan