2013-10-09 3 views
25

У меня есть файл WAR. Я хотел бы открыть его, отредактировать XML-файл, удалить несколько банок, а затем повторно упаковать его.Как распаковать и переупаковать файл WAR

Я использовал WINRAR, чтобы открыть WAR-файл, и я удалил несколько Jars и сделал «Добавить в архив» в WinRar и создал WAR.

Когда я развернул папку WAR в jboss, я получил исключение.

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" 

Как переупаковать WAR?

+0

Вы позаботились о создании формата ZIP с помощью WinRAR, потому что военные файлы являются специальной структурой ZIP-файла. – khmarbaise

ответ

46

вы можете обновить войну из командной строки с помощью команды Java, как указано здесь:

jar -uvf test.war yourclassesdir 

Других полезных команд:

Команды разархивировать/взрывается война файл

jar -xvf test.war 

Команда для создания военного файла

jar -cvf test.war yourclassesdir 
+0

Что это? Извлечение или переупаковка? – vinoth

+0

@VinothKumar uvf опция - обновить ваш военный файл, опция cvf - создавать, xvf - распаковывать или взрывать. –

+2

он не работает, он не поддерживает одну и ту же файловую структуру –

1

Я уверен, что для этого есть теги ANT, но они использовали этот 7zip-хак в сценарии .bat. Я использую инструмент командной строки http://www.7-zip.org/. Все время я использую это для изменения jdbc url в 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 

Вы можете извлечь весь .war файл (его почтовый индекс после того, как все), удалять файлы, заменять файлы, добавлять файлы, изменять файлы и переупаковывать в .WAR архивный файл. Но, изменяя один файл в большом .war-архиве, это может быть лучше всего извлечь конкретный файл, а затем обновить оригинальный архив.

0

Непрограмматически вы можете просто открыть архив, используя 7zip UI, чтобы добавлять/удалять или извлекать/заменять файлы без изменения структуры. Я не знаю, что это не было проблемой, используя другие вещи до сих пор :)

1

Адаптирование из приведенных выше ответов, это работает на сервере Tomcat, но может быть адаптирован для JBoss, а также или любой контейнер:

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

не нужно, tomcat естественно извлекает военный файл в папку с тем же именем. вы просто изменяете нужный файл внутри этой папки (включая файлы конфигурации .xml), вот и все. технически нет необходимости перезагружать после применения кота модификации

0

не копировать войны файл/TMP Теперь извлечь содержимое:

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 

теперь у вас есть в /tmp/warfile.war файл обновляется.

Смежные вопросы