Как распаковать и переупаковать файл WAR
У меня есть файл WAR. Я хотел бы открыть его, отредактировать XML файл, удалить некоторые банки и затем повторно упаковать его.
Я использовал 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?
Ответы
Ответ 1
вы можете обновить свою войну из командной строки с помощью java-команд, как указано здесь:
jar -uvf test.war yourclassesdir
Другие полезные команды:
Команда разблокировать/разбить файл войны
jar -xvf test.war
Команда для создания файла войны
jar -cvf test.war yourclassesdir
Ответ 2
Я уверен, что есть теги ANT, но они использовали этот взлом 7zip в .bat script. Я использую 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(его zip в конце концов), удалить файлы, заменить файлы, добавить файлы, изменить файлы и переупаковать в .war архив. Но, изменяя один файл в большом архиве .war, лучше всего извлечь конкретный файл, а затем обновить исходный архив.
Ответ 3
Адаптация к приведенным выше ответам, это работает для 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
Ответ 4
Возможно, вы изменили структуру войны или развернули ее на другой версии сервера. Ознакомьтесь с этими ссылками Ошибка развертывания войны в JBoss AS 7 (режим домена): "Не удалось обработать фазу" СТРУКТУРА развертывания " и https://community.jboss.org/thread/199387?start=0&tstart=0&_sscc=t
Ответ 5
Не программно, вы можете просто открыть архив с помощью 7zip UI, чтобы добавлять/удалять или извлекать/заменять файлы без изменения структуры. Я не знал, что это проблема с использованием других вещей до сих пор:)
Ответ 6
не нужно, tomcat естественно извлекает военный файл в папку с тем же именем.
вы просто изменяете нужный файл внутри этой папки (включая файлы конфигурации .xml), что и все.
технически нет необходимости перезапускать tomcat после применения модификаций
Ответ 7
скопируйте свой военный файл в /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 обновлен ваш файл.