【问题标题】:Deploy web applications to JBoss from Eclipse, with dependencies从 Eclipse 将 Web 应用程序部署到 JBoss,并具有依赖项
【发布时间】:2013-03-14 21:45:06
【问题描述】:

我有一个在安装了 JBoss 工具的 Eclipse 下开发的项目。当我将应用程序部署到 Jboss 服务器时,一些通过 Maven 可用于项目的帮助 jar 文件不会复制到 WEB-INF/lib 文件夹中。因此,我在运行时收到 ClassNotFound 异常。

是否有任何方法可以说服 Eclipse(或 Maven)在部署时将 jar 复制到 lib 文件夹中?

编辑:pom.xml 看起来像:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                                   http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.whatever.simulators</groupId>
<artifactId>eebuildingsim</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>eebuildingsim Maven Webapp</name>
<url>http://maven.apache.org</url>

<dependencies>

    <!-- begin JBoss -->

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>2.3.2.FINAL</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>jaxrs-api</artifactId>
        <version>2.3.0.GA</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.1.2</version>
        <scope>provided</scope>
    </dependency>

    <!-- end JBoss -->

    <dependency>
        <groupId>ro.mysite</groupId>
        <artifactId>petrinetexec</artifactId>
        <version>0.1.3.81</version>
    </dependency>

    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.3</version>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.whatever.myAuxiliaryStuff</groupId>
        <artifactId>myAuxiliaryStuff </artifactId>
        <version>0.1.0.1305</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.0-m09</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.0-m09</version>
    </dependency>
</dependencies>

<build>
    <finalName>eebuildingsim</finalName>
</build>

工件myAuxiliaryStuff 应该部署在WEB-INF/lib 下,在jboss 部署服务器下。

使用:

  • Eclipse:Juno Service Release 1
  • 老板:7.1.1。最终
  • m2e 1.3.1.20130219-1424
  • eclipse web工具平台3.4.2.v2013

稍后编辑:jboss 的日志文件中报告的错误如下:

 12:31:38,507 INFO  [org.jboss.weld.deployer] (MSC service thread 1-5)
 JBAS016002: Processing weld deployment mywar.war 12:31:38,522 ERROR
 [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC00001: Failed
 to start service jboss.deployment.unit."mywar.war".POST_MODULE:
 org.jboss.msc.service.StartException in service
 jboss.deployment.unit."mywar.war".POST_MODULE: Failed to process phase
 POST_MODULE of deployment "mywar.war"  at
 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119)
 [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]  at
 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
 [jboss-msc-1.0.2.GA.jar:1.0.2.GA]  at
 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
 [jboss-msc-1.0.2.GA.jar:1.0.2.GA]  at
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
 [rt.jar:1.7.0_05]  at
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
 [rt.jar:1.7.0_05]  at java.lang.Thread.run(Thread.java:722)
 [rt.jar:1.7.0_05] Caused by: java.lang.NoSuchFieldError: FLOW  at
 com.sun.faces.flow.FlowDiscoveryCDIExtension.<clinit>(FlowDiscoveryCDIExtension.java:90)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method) [rt.jar:1.7.0_05]  at
 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
 [rt.jar:1.7.0_05]  at
 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 [rt.jar:1.7.0_05]  at
 java.lang.reflect.Constructor.newInstance(Constructor.java:525)
 [rt.jar:1.7.0_05]  at
 org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.loadExtension(WeldPortableExtensionProcessor.java:117)
    at
 org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.loadAttachments(WeldPortableExtensionProcessor.java:100)
    at
 org.jboss.as.weld.deployment.processors.WeldPortableExtensionProcessor.deploy(WeldPortableExtensionProcessor.java:86)
    at
 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113)
 [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]  ... 5 more

 12:31:38,522 INFO  [org.jboss.as.server] (DeploymentScanner-threads -
 2) JBAS015870: Deploy of deployment "mywar.war" was rolled back with
 failure message {"JBAS014671: Failed services" =>
 {"jboss.deployment.unit.\"mywar.war\".POST_MODULE" =>
 "org.jboss.msc.service.StartException in service
 jboss.deployment.unit.\"mywar.war\".POST_MODULE: Failed to process
 phase POST_MODULE of deployment \"mywar.war\""}} 12:31:38,647 INFO 
 [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015877:
 Stopped deployment mywar.war in 115ms 12:31:38,647 INFO 
 [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774:
 Service status report JBAS014775:    New missing/unsatisfied
 dependencies:
       service jboss.naming.context.java.module.mywar.mywar (missing) dependents: [service
 jboss.naming.context.java.module.mywar.mywar.ValidatorFactory, service
 jboss.naming.context.java.module.mywar.mywar.Validator]  JBAS014777:  
 Services which failed to start:      service
 jboss.deployment.unit."mywar.war".POST_MODULE:
 org.jboss.msc.service.StartException in service
 jboss.deployment.unit."mywar.war".POST_MODULE: Failed to process phase
 POST_MODULE of deployment "mywar.war"

 12:31:38,647 ERROR [org.jboss.as.server.deployment.scanner]
 (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation
 failed and was rolled back. Steps that failed:" => {"Operation step-2"
 => {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"mywar.war\".POST_MODULE" =>
 "org.jboss.msc.service.StartException in service
 jboss.deployment.unit.\"mywar.war\".POST_MODULE: Failed to process
 phase POST_MODULE of deployment \"mywar.war\""}}}}

【问题讨论】:

  • "一些通过 Maven 提供给项目的帮助 jar 文件" 哪一个?这些依赖项是如何在 pom.xml 中定义的?如果您需要帮助,请发布您的 pom.xml 和错误跟踪。
  • 如何在 Eclipse 中将应用程序部署到 Jboss 服务器?通过 Maven 构建(需要 m2e Eclipse 插件)或普通的 Eclipse 运行方式?
  • @yorkow - 从 Eclipse 运行。
  • 在您的项目中,转到Properties -&gt; Java Build Path -&gt; Order and Export 并尝试勾选Maven Dependencies 看看是否有帮助。
  • @yorkw:不,对不起......我得到的错误与我对 Attila 回答的评论中的错误相同。

标签: eclipse maven deployment jboss


【解决方案1】:

Eclipse 和插件有点挑剔。这就是我为使其正常工作所做的工作。

Project -> Properties -> Deployment Assembly
Add...
Java Build Path Entries (Next >)
Maven Dependencies (Finish)

部署属性面板现在应该包含一个条目:源:Maven 依赖项 -> 部署路径:WEB_INF/lib

【讨论】:

  • 感谢您的回复。出现与其他建议方法相同的错误,请参阅我的问题中的“稍后编辑”。
  • 在应用 Sam Red 的方法后,您的解决方案非常有效。我决定给他赏金。我希望你不要介意。感谢您为解决方案做出贡献。
  • @lmsasu 老实说,我确实介意你没有给我奖金。您提出并悬赏的问题是“是否有任何方法可以说服 Eclipse(或 Maven)在部署时将 jar 复制到 lib 文件夹中?”我完全确定了这个答案(在花了大约半个小时挖掘并重建一个我解决了这个问题的旧项目之后)。后来发现你的 Maven 配置有问题,所以解决赏金问题并不足以完全修复你的项目,但这是一个不同的问题。这只是布朗尼点,但我确实觉得很糟糕。
【解决方案2】:

这很可疑:

java.lang.NoSuchFieldError: FLOW

如果我没记错的话,这与 JSF 有关。我有一些建议,但我不是任何方面的专家。

首先尝试像这样为jsf-apijsf-impl 添加provided 依赖范围(因为JBoss 有它们):

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.2.0-m09</version>
    <scope>provided</scope>   // <----- do it for both
</dependency>

AFAIK,JBoss 7.1.1 已经有了 JSF 2.1.7。所以,如果你真的需要 JSF 2.2,你应该更新 JBoss 中的 JSF 模块。这是Migration to JSF 2.2的方法。

另一种选择是将 JSF 捆绑到您的 WAR 中并通知 JBoss 排除它的 容器版本(JBoss 附带的那个):

web.xml 中添加:

<context-param>
      <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
      <param-value>true</param-value>
</context-param>

并且在 jboss-deployment-structure.xml 中排除 JBoss 的实现:

<jboss-deployment-structure>
    <deployment>

        <exclusions>
            <module name="javax.faces.api" />
        </exclusions>
             .
             .
             .

【讨论】:

  • 您是否尝试过将范围设置为provided?你得到了什么?我认为你需要某种依赖,但你可以删除它并测试看看会发生什么。
  • 很高兴听到这个消息。我猜是你的项目和 JBoss 中的 JSF 模块的兼容性问题。
  • 傻我,我在 pom 文件中添加了一些无用的 jsf 依赖项,但我现在不需要 jsf。通过followinf“Old Pro”的解决方案,它现在正在工作。
  • 但无论如何,如果您想保留这些依赖项,您应该更新 JBoss JSF 模块或告诉 JBoss 排除它自己的模块并使用您的项目捆绑的 JSF。我将编辑我的答案以包含它。
  • 当然。我认为给你赏金是公平的。通常,它应该在您和“Old Pro”之间共享,但他/她的解决方案不起作用。老专业,我怎么不介意这个。
【解决方案3】:

根据您的描述,您只使用了 Eclipse 和 JBoss 工具,并且依赖项存储在 Maven pom 文件中。要让 Eclipse 了解这些依赖关系,您需要有 eclipse-maven 集成。 M2e是它的常见选择。

所以你需要安装这些:

【讨论】:

  • @lmsasu 请将该信息添加到问题中,包括您拥有哪些版本。如果你不说,我们不知道。另外,关于 JBoss 和 Eclipse 的版本信息会很好。
  • Eclipse:Juno Service Release 1,Jboss:7.1.1。最终,m2e 1.3.1.20130219-1424,eclipse web 工具平台 3.4.2.v2013....
【解决方案4】:

进入你的 pom.xml 所在目录并执行以下命令。

mvn package

这个命令应该为你创建一个war文件来部署到你的应用服务器。此文件是一个 zip 文件,查看其内容并查看您的 myAuxiliaryStuff.jar 是否在 web-inf/lib 中。如果是,您的问题在于 Eclipse 与 Maven 的集成。

【讨论】:

  • 感谢您的回复。发出此命令后,war 文件确实包含所有需要的 jar 文件。但是,当我使用 JBoss 管理控制台(网页)部署它时,出现一些错误:[org.jboss.msc.service.fail](MSC 服务线程 1-2)MSC00001:无法启动服务 jboss.deployment。 unit."mywar.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."mywar.war".POST_MODULE: 无法处理部署“mywar.war”的阶段 POST_MODULE
  • 这个日志还有其他异常吗?
【解决方案5】:

您似乎已经安装了所有东西。 我也有这个问题。 只需右键单击项目并选择即可。

“标记为可部署”

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 2010-12-12
    • 2018-12-02
    • 2012-08-12
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多