2013-10-09 12 views
25

Ho un file WAR. Vorrei aprirlo, modificare un file XML, rimuovere alcuni barattoli e quindi ri-confezionarlo.Come decomprimere e riconfezionare un file WAR

Ho usato WINRAR per aprire il file WAR e ho rimosso alcuni jar e ho fatto un 'Aggiungi all'archivio' in WinRar e creato un WAR.

Quando ho distribuito WAR nella cartella jboss, ho ottenuto un'eccezione.

16:05:14,316 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) 
    MSC00001: Failed to start service jboss.deployment.unit."myapplication.war". 
    STRUCTURE: org.jboss.msc.service.StartException in 
    service jboss.deployment.unit."myapplication.war".STRUCTURE: 
    Failed to process phase STRUCTURE of deployment "myapplication.war" 

Come riconfezionare WAR?

+0

Ti sei preoccupato di creare il formato zip con WinRAR, perché i file di guerra sono strutture speciali dei file ZIP. – khmarbaise

risposta

46

è possibile aggiornare la vostra guerra dalla riga di comando utilizzando i comandi java come accennato qui:

jar -uvf test.war yourclassesdir 

Altri comandi utili:

comando per decomprimere/esplodere il file WAR

jar -xvf test.war 

Comando per creare il file di guerra

jar -cvf test.war yourclassesdir 
+0

a cosa serve? Estrazione o riconfezionamento? – vinoth

+0

L'opzione uvf di @VinothKumar è di aggiornare il tuo file di guerra, l'opzione cvf è quella di creare, xvf è decomprimere o esplodere. –

+2

non funziona, non mantiene la stessa struttura di file –

1

Sono sicuro che ci sono tag ANT per farlo, ma ho usato questo hack 7zip nello script .bat. Io uso lo strumento da riga di comando http://www.7-zip.org/. Tutte le volte che uso questo per cambiare jdbc url all'interno del file j2ee context.xml.

mkdir .\temp-install 
c:\apps\commands\7za.exe x -y mywebapp.war META-INF/context.xml -otemp-install\mywebapp 
..here I have small tool to replace text in xml file.. 
c:\apps\commands\7za.exe u -y -tzip mywebapp.war ./temp-install/mywebapp/* 
rmdir /Q /S .\temp-install 

Si potrebbe estrarre tutto il file .war (la sua zip dopo tutto), eliminare i file, sostituire i file, aggiungere file, modificare i file e riconfezionare per .war file di archivio. Ma cambiando un file in un grande archivio .war questo potrebbe essere meglio estrarre un file specifico e quindi aggiornare l'archivio originale.

0

Non programmaticamente, puoi semplicemente aprire l'archivio utilizzando l'interfaccia utente di 7zip per aggiungere/rimuovere o estrarre/sostituire file senza modificare la struttura. Non sapevo che fosse un problema con l'altro fino ad ora :)

1

Adattamento dalle risposte di cui sopra, questo funziona per Tomcat, ma può essere adattato per JBoss come bene o qualsiasi contenitore:

sudo -u tomcat /opt/tomcat/bin/shutdown.sh 
cd /opt/tomcat/webapps 
sudo mkdir tmp; cd tmp 
sudo jar -xvf ../myapp.war 
#make edits... 
sudo vi WEB-INF/classes/templates/fragments/header.html 
sudo vi WEB-INF/classes/application.properties 
#end of making edits 
sudo jar -cvf myapp0.0.1.war * 
sudo cp myapp0.0.1.war .. 
cd .. 
sudo chown tomcat:tomcat myapp0.0.1.war 
sudo rm -rf tmp 
sudo -u tomcat /opt/tomcat/bin/startup.sh 
0

non c'è bisogno di questo, Tomcat estrae naturalmente il file di guerra in una cartella con lo stesso nome. devi semplicemente modificare il file desiderato all'interno di quella cartella (inclusi i file di configurazione .xml), questo è tutto. tecnicamente non c'è bisogno di riavviare Tomcat dopo l'applicazione delle modifiche

0

copiare il file guerra per/tmp ora estrarre il contenuto:

cp warfile.war /tmp 
cd /tmp 
unzip warfile.war 
cd WEB-INF 
nano web.xml (or vim or any editor you want to use) 
cd .. 
zip -r -u warfile.war WEB-INF 

ora che avete nel vostro /tmp/warfile.war file aggiornato.