玩! war 命令 - 是不是可以从应用程序 /lib 文件夹中排除某些 jar

Posted

技术标签:

【中文标题】玩! war 命令 - 是不是可以从应用程序 /lib 文件夹中排除某些 jar【英文标题】:Play! war command - Is it possible to exclude certain jar from the application /lib folder玩! war 命令 - 是否可以从应用程序 /lib 文件夹中排除某些 jar 【发布时间】:2012-01-05 20:25:13 【问题描述】:

我正在尝试将 play 应用程序自动部署为 .war 文件。

最终应用程序将在 JBOSS AS7 上运行。 我现在遇到的问题是,当我将战争部署到 JBOSS 时,我得到了这个异常。

14:52:39,728 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) Starting  deployment of "my-test-app-server-0.0.2-SNAPSHOT.war"
14:52:43,822 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC00001: Failed to start service jboss.deployment.unit."my-test-app-server-0.0.2-SNAPSHOT.war".PARSE: org.jboss.msc.service.Start 
Exception in service jboss.deployment.unit."my-test-app-server-0.0.2-SNAPSHOT.war".PARSE: Failed to process phase PARSE of deployment "my-test-app-server-0.0.2-SNAPSHOT.war"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121) [jboss-as-server-7.0.2.Final.jar:7.0.2.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_22]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_22]
    at java.lang.Thread.run(Thread.java:662) [:1.6.0_22]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: Failed to parse POJO xml ["/C:/jboss-as-web-7.0.2.Final/bin/content/my-test-app-server-0.0.2-SNAPSHOT.war/WEB-INF/lib/netty-3.2.5.Final.jar/META-INF/jboss-beans.xml"]
    at org.jboss.as.pojo.KernelDeploymentParsingProcessor.parseDescriptor(KernelDeploymentParsingProcessor.java:130)
    at org.jboss.as.pojo.KernelDeploymentParsingProcessor.parseDescriptors(KernelDeploymentParsingProcessor.java:104)
    at org.jboss.as.pojo.KernelDeploymentParsingProcessor.deploy(KernelDeploymentParsingProcessor.java:76)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115) [jboss-as-server-7.0.2.Final.jar:7.0.2.Final]
    ... 5 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[17,1] Message: Unexpected element 'urn:jboss:bean-deployer:2.0deployment'
    at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:98) [staxmapper-1.0.0.Final.jar:1.0.0.Final]
    at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:59) [staxmapper-1.0.0.Final.jar:1.0.0.Final]
    at org.jboss.as.pojo.KernelDeploymentParsingProcessor.parseDescriptor(KernelDeploymentParsingProcessor.java:123)
    ... 8 more

我发现,如果我在将 lib/netty-3.2.5.Final.jar 文件部署到 JBOSS 之前手动从 war 中删除它,问题就会消失。

当我使用 play war 命令生成战争时,现在有办法做到这一点吗? 任何有关这方面的信息将不胜感激。 谢谢

【问题讨论】:

【参考方案1】:

我并不知道。 play war 命令允许你传递一个排除列表,我已经从下面的 python 文件中复制了 cmets。

~ To exclude some directories, use the --exclude option and ':'-separator (eg: --exclude .svn:target:logs:tmp).

但是,这表明它仅适用于目录。

执行的命令是framework/pym/utils.py 中的 package_as_war,所以你可以破解它来专门删除文件,但显然如果你更新你的 Play 版本,这将不会向后兼容。

【讨论】:

以上是关于玩! war 命令 - 是不是可以从应用程序 /lib 文件夹中排除某些 jar的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行运行 WAR 中的类?

l5213. 玩筹码

Linux命令还能这么玩?你一定想不到!

魔兽争霸玩不了,一打开war3就自动弹出来,总是进不去,昨天还能玩的。

如何使用命令提示符将war文件部署到tomcat?

将 JDBC 驱动程序发送到 WAR for Tomcat 7