2012-08-03 20 views
7

Creé nuevos módulos para el software escrito en Java. Este software se ejecuta desde el archivo jar. Mis clases amplían las clases en este software. Quiero escribir un complemento que agregue nuevas clases al archivo jar. Sé cómo extraer un archivo jar en el directorio y agregarlos al archivo jar utilizando el paquete java.util.jar, pero como hay muchos archivos para extraer del archivo, ¿es posible agregar nuevas clases sin extraer los archivos? a la carpeta, de alguna manera directamente.Cómo agregar nuevas clases de Java a las clases existentes en el archivo jar

+1

Me viene a la mente el modding de Minecraft. Por curiosidad, ¿escribiste este software que intentas extender tú mismo? Hay mejores formas de hacerlo en ese caso, utilizando la carga dinámica de clases. – Wug

+0

No es necesario modificar un archivo jar existente. Solo coloque las clases en su propio jar y asegúrese de que ambos jar estén en classpath. –

+0

Posible duplicado por el mismo usuario: http://stackoverflow.com/questions/11852954/changing-code-at-runtime-in-java –

Respuesta

4
jar uf jar-file input-file(s) 

Permitirá agregar new files/update archivos existentes en el vaso sin extraer.

12

Usted puede utilizar el siguiente comando

jar uf foo.jar foo.class 
+0

Esto funciona solo al 50% ya que ese comando no colocará la clase en su paquete correspondiente estructura de árbol. – m0skit0

+2

@ m0skit0 Para poner la clase en la estructura tres, debe pasar el nombre de la clase con la estructura del directorio. jar uf foo.jar /com/test/foo.class –

4

Su pregunta indica que usted quiere hacer esto mediante programación, no usando la línea de comandos jar herramienta.

De la documentación se desprende que usted por lo menos necesita para obtener un JarInputStream de un JarFile existente, iterar sobre las entradas utilizando getNextJarEntry, y escribir a un JarOutputStream con las entradas, también añadir sus propios archivos nuevos utilizando las nuevas JarEntry objetos para cada nuevo archivo.

Here's código de ejemplo para escribir un frasco mediante programación desde cero, este debe extenderse muy bien a su caso, con la diferencia de que la mayoría de los objetos JarEntry vendrá de un JarInputStream.

Cuestiones relacionadas