2012-08-03 14 views
7

Ho creato nuovi moduli per il software scritto in java. Questo software viene eseguito dal file jar. Le mie classi estendono le classi in questo software. Voglio scrivere un plugin che aggiunge nuove classi al file jar. So come estrarre un file jar nella directory e aggiungerli al file jar usando il pacchetto java.util.jar ma poiché ci sono molti file da estrarre dal file, è possibile aggiungere nuove classi senza estrarre i file alla cartella, in qualche modo direttamente.Come aggiungere nuove classi java alle classi esistenti nel file jar

+1

Mi viene in mente il modding di minecraft. Per curiosità, hai scritto questo software che stai cercando di estendere te stesso? Ci sono modi migliori per farlo in quel caso, usando il caricamento dinamico della classe. – Wug

+0

Non è necessario modificare un file jar esistente. Basta mettere le classi nel proprio barattolo e assicurarsi che entrambi i barattoli siano sul classpath. –

+0

Possibile duplicato dello stesso utente: http://stackoverflow.com/questions/11852954/changing-code-at-runtime-in-java –

risposta

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

Consentirà di aggiungere new files/update file esistenti in jar senza estrarre.

12

È possibile utilizzare il seguente comando

jar uf foo.jar foo.class 
+0

Questo funziona solo al 50% poiché tale comando non inserirà la classe nel pacchetto corrispondente struttura ad albero. – m0skit0

+2

@ m0skit0 Per mettere la classe nella struttura tres è necessario passare il nome della classe con la struttura della directory. jar uf foo.jar /com/test/foo.class –

4

La tua domanda indica che si vuole fare questo a livello di codice, non utilizzando la riga di comando jar strumento.

Dalla documentazione risulta che avrete almeno bisogno di ottenere un JarInputStream da un JarFile esistente, iterare le voci utilizzando getNextJarEntry, e scrivere in un JarOutputStream con le voci, anche aggiungendo i propri nuovi file utilizzando il nuovo JarEntry oggetti per ogni nuovo file.

Here's codice di esempio per la scrittura di un vaso da zero a livello di codice, questa dovrebbe estendersi ben al vostro caso, con la differenza che la maggior parte degli oggetti JarEntry sarà venuta da un JarInputStream.

Problemi correlati