53

我有一个 WAR 文件。我想打开它,编辑一个 XML 文件,删除一些 jar,然后重新打包它。

我使用 WINRAR 打开 WAR 文件并删除了一些罐子并在 WinRar 中执行了“添加到存档”并创建了一个 WAR。

当我在 jboss 文件夹中部署 WAR 时,出现异常。

   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 ?

4

8 回答 8

84

您可以使用此处提到的 java 命令从命令行更新您的战争:

jar -uvf test.war yourclassesdir 

其他有用的命令:

解压/分解war文件的命令

jar -xvf test.war

创建war文件的命令

jar -cvf test.war yourclassesdir 

例如:

jar -cvf test.war *
jar -cvf test.war WEB-INF META-INF
于 2013-10-09T10:53:12.997 回答
9

将您的战争文件复制到 /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 中更新了您的文件。

于 2017-05-15T07:19:37.820 回答
5

这对我有用:

mv xyz.war ./tmp
cd tmp
jar -xvf xyz.war
rm -rf WEB-INF/lib/zookeeper-3.4.10.jar
rm -rf xyz.war
jar -cvf xyz.war *
mv xyz.war ../
cd ..
于 2018-05-11T15:00:31.093 回答
4

根据上述答案,这适用于 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
于 2016-04-21T02:42:16.330 回答
2

我确信有 ANT 标签可以做到这一点,但在 .bat 脚本中使用了这个 7zip hack。我使用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 存档中更改一个文件可能最好提取特定文件,然后更新原始存档。

于 2013-10-09T10:59:33.610 回答
1

非编程方式,您只需使用 7zip UI 打开存档即可添加/删除或提取/替换文件,而无需更改结构。直到现在我才知道使用其他东西有问题:)

于 2014-03-26T23:03:10.450 回答
0

也许,您已经修改了战争的结构或将其部署在不同的服务器版本上。查看这些链接将战争部署到 JBoss AS 7(域模式)时出错:“无法处理部署阶段结构”https://community.jboss.org/thread/199387?start=0&tstart=0&_sscc=t

于 2013-10-09T11:06:27.673 回答
-1

没必要,tomcat自然将war文件解压到同名文件夹中。您只需修改该文件夹中所需的文件(包括 .xml 配置文件),仅此而已。从技术上讲,应用修改后无需重新启动 tomcat

于 2017-03-02T11:27:50.837 回答