2013-10-09 181 views
25

我有一個WAR文件。我想打開它,編輯一個XML文件,刪除一些jar並重新打包。如何解包和重新打包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

你是否注意用WinRAR創建zip格式,導致一個war文件是ZIP文件的特殊結構。 – khmarbaise

回答

46

您可以使用Java命令在命令行這裏提到更新你的戰爭:

jar -uvf test.war yourclassesdir 

其他有用的命令:

命令解壓/爆炸war文件

jar -xvf test.war 

命令創建戰爭文件

jar -cvf test.war yourclassesdir 
+0

這是幹什麼用的?提取或重新打包? – vinoth

+0

@VinothKumar uvf選項是更新你的war文件,cvf選項是創建的,xvf是解壓縮或者爆炸。 –

+2

它不工作,它不保留相同的文件結構 –

1

我確定有ANT標籤可以做到這一點,但在.bat腳本中使用了這種7zip黑客。我使用http://www.7-zip.org/命令行工具。我一直使用它來改變j2ee context.xml文件中的jdbc url。

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文件中更改一個文件可能是最好的提取特定文件,然後更新原始文件。

0

非編程方式,您可以使用7zip用戶界面打開存檔,添加/刪除或提取/替換文件,而無需更改結構。我不知道這是用其他的東西有問題到現在爲止:)

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自然將war文件解壓縮到一個同名的文件夾中。 您只需修改該文件夾內的所需文件(包括.xml配置文件)即可。 技術上沒有必要將修改

0

後重新啓動Tomcat的WAR文件複製到/ 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您的文件進行更新。