Me gustaría modificar un archivo dentro de mi jar. ¿Es posible hacer esto sin extraer y volver a sacudir, desde dentro de mi aplicación?
El archivo que quiero modificar son archivos de configuración, en su mayoría basados en xml.
La razón por la que estoy interesado en no desajustar es porque la aplicación está empaquetada con launch4j si la abro no puedo crear el archivo .exe nuevamente.
Respuestas:
Puede utilizar la
u
opción parajar
De los tutoriales de Java:
"Se sobrescribirán los archivos que ya estén en el archivo y que tengan la misma ruta de acceso que un archivo que se está agregando".
Consulte Actualización de un archivo JAR .
Mucho mejor que hacer todo el frasco de nuevo. Invocar esto desde dentro de su programa también parece posible. Intente ejecutar la línea de comandos en Java
fuente
Puedes usar Vim:
vim my.jar
Vim es capaz de editar archivos de texto comprimidos, siempre que los tenga
unzip
en su entorno.fuente
zip
en tu entorno, poder guardar los cambios. ¡Gracias por la respuesta!Los archivos jar de Java tienen el mismo formato que los archivos zip, por lo que si tiene una utilidad de archivo zip que le permita modificar un archivo, tiene el pie en la puerta. El segundo problema es que si desea recompilar una clase o algo, probablemente tendrá que reconstruir el jar; pero un archivo de texto o algo (xml, por ejemplo) debería modificarse con bastante facilidad.
fuente
Como muchos han dicho, no se puede cambiar un archivo en un JAR sin volver a escanear el JAR. Es aún peor con Launch4J, tienes que reconstruir el EXE una vez que cambias el JAR. Así que no sigas esta ruta.
Por lo general, es una mala idea poner archivos de configuración en el JAR. Aquí está mi sugerencia. Busque su archivo de configuración en algunas ubicaciones predeterminadas (como el directorio de inicio, \ Archivos de programa \, etc.). Si encuentra un archivo de configuración, utilícelo. De lo contrario, use el que está en el JAR como respaldo. Si hace esto, solo necesita escribir el archivo de configuración en la ubicación predeterminada y el programa lo recogerá.
Otro beneficio de este enfoque es que el archivo de configuración modificado no se sobrescribe si actualiza su software.
fuente
No estoy seguro si esto ayuda, pero puede editar sin extraer:
Consulte la publicación del blog para obtener más detalles http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
fuente
Esto puede ser más trabajo de lo que está buscando a corto plazo, pero sospecho que a largo plazo sería muy beneficioso para usted considerar el uso de Ant (o Maven , o incluso Bazel ) en lugar de construir jar manualmente. . De esa manera, puede simplemente hacer clic en el archivo ant (si usa Eclipse) y reconstruir el jar.
Alternativamente, es posible que desee no tener estos archivos de configuración en el jar; si espera que necesite reemplazar estos archivos con regularidad, o si se supone que se distribuirá a varias partes, el archivo de configuración no debe ser parte de el tarro en absoluto.
fuente
Para ampliar lo que dijo dfa, la razón es que el archivo jar está configurado como un archivo zip. Si desea modificar el archivo, debe leer todas las entradas, modificar la que desea cambiar y luego escribir las entradas nuevamente en el archivo jar. Tuve que hacer esto antes, y esa fue la única manera que pude encontrar para hacerlo.
EDITAR
Tenga en cuenta que esto utiliza los editores de archivos jar internos de Java, que son flujos de archivos. Estoy seguro de que hay una manera de hacerlo, puede leer todo el jar en la memoria, modificar todo y luego volver a escribir en un flujo de archivos. Eso es lo que creo que están haciendo las utilidades como 7-Zip y otras, ya que creo que la ToC de un encabezado zip debe definirse en el momento de la escritura. Sin embargo, podría estar equivocado.
fuente
Sí, puede, usando SQLite puede leer o escribir en una base de datos desde el archivo jar, para que no tenga que extraerlo y luego volverlo a jar, siga mi publicación http://shoaibinamdar.in/blog/? p = 313
utilizando la sintaxis "jdbc: sqlite :: resource:" podría leer y escribir en una base de datos desde el archivo jar
fuente
Echa un vistazo a TrueZip .
Hace exactamente lo que desea (editar archivos en línea dentro de un archivo jar), a través de una API de sistema de archivos virtual. También admite archivos anidados (jar dentro de un jar).
fuente
Extraiga el archivo jar por ej. con winrar y use CAVAJ:
Cavaj Java Decompiler es una utilidad gráfica gratuita que reconstruye el código fuente de Java a partir de archivos CLASS.
aquí hay un video tutorial si lo necesita: https://www.youtube.com/watch?v=ByLUeem7680
fuente
Siempre que este archivo no sea .class, es decir, archivo de recursos o archivo de manifiesto, puede hacerlo.
fuente
La forma más sencilla que he encontrado para hacer esto en Windows es con WinRAR :
fuente
la mayoría de las respuestas anteriores dicen que no puede hacerlo para el archivo de clase.
Incluso si desea actualizar el archivo de clase, también puede hacerlo. Todo lo que necesita hacer es arrastrar y soltar el archivo de clase desde su espacio de trabajo en el jar.
En caso de que desee verificar sus cambios en el archivo de clase, puede hacerlo usando un descompilador como jd-gui.
fuente