【问题标题】:jsf 2 and maven with eclipse "run on server"jsf 2 和 Maven 与 Eclipse “在服务器上运行”
【发布时间】:2011-03-24 14:37:09
【问题描述】:

我查看了来自 here 的 Mojarra JSF 2.0 helloworld 示例(只需输入 guest 作为用户名)。 我将它作为 maven 项目导入到带有 tomcat 6 服务器的 eclipse (v 3.5) 中。我有在 servlet 容器中运行 JSF 2.0 的 mojarra 依赖项。

当我打包它并且因为 jsf 依赖项具有编译范围时,这些 jar 已经在 WEB-INF/lib 中。然后我将它部署到一个新的 tomcat 实例中,它可以正常工作而不会抱怨 ClassNotFoundException。

我的问题是如果不将这些 jar 放到 eclipse 的 tomcat 实例中,我就无法在 eclipse 中运行该项目。

是不是我做错了什么?

【问题讨论】:

    标签: eclipse maven-2 tomcat jsf-2


    【解决方案1】:

    我有在 servlet 容器中运行 JSF 2.0 的 mojarra 依赖项。

    您的意思是您按照 cmets 中的建议修改了提供的 pom 的依赖项:

    <dependencies>
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    
        <!--
          Uncomment these dependencies and comment out the one above to use
          a simple servlet container instead of a Java EE Application Server
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>[2.0.1,)</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>[2.0.1,)</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
         <dependency>
             <groupId>javax.servlet.jsp.jstl</groupId>
             <artifactId>jstl-api</artifactId>
             <version>1.2</version>
         </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl-impl</artifactId>
            <version>1.2</version>
        </dependency>
        -->
    
    </dependencies>
    

    你能确认一下吗?实际上,显示修改后的 pom 可能会有所帮助。

    当我使用“在服务器上运行”时,它总是说“找不到javax.faces.web.FacesServlet

    我猜你的意思是javax.faces.webapp.FacesServlet。它肯定在jsf-api.jar 中。并将jsf-api.jarjsf-impl.jar 放入WEB-INF/lib should also work。你用的是 m2eclipse 对吗?

    但是当部署到另一个 tomcat 实例(没有 mojarra jars)时,它可以正常工作。

    你的意思是在 Eclipse 之外吗?并且不将 Mojarra jar 放入 Tomcat 的 lib 文件夹中?

    【讨论】:

    • 是的,我取消注释这些依赖项。但为了在 eclipe 中运行它,我必须将 mojarra jar 放入 tomcat lib 文件夹。当我打包它并且因为 jsf 依赖项具有编译范围时,这些 jar 已经在 WEB-INF/lib 中。然后我将它部署到一个新的 tomcat 实例中,它可以正常工作而不会抱怨 ClassNotFoundException。我的问题是如果不将这些 jar 放到 eclipse 的 tomcat 实例中,我就无法在 eclipse 中运行该项目。
    • @robinmag:稍后我会尝试重现。听起来很奇怪。
    【解决方案2】:

    我已经解决了。它来自 Maven 类路径问题,而不是来自 JSF。

    如果有人遇到这种情况,只需右键单击您的项目,然后选择“Java EE 模块依赖项”,然后确保选中“Maven 依赖项”。重启你的服务器,也许你也必须重新加载你的项目(关闭并重新打开)。

    希望有所帮助。

    【讨论】:

    • 我不会称其为 Maven 类路径问题,而是与 Eclipse 错误配置相关的问题:如果您想让您的项目依赖项由 Maven 管理,您的 Eclipse 项目需要正确配置... 就个人而言,我更喜欢在命令行上创建 Maven 项目,然后使用 Import... > Existing Maven Projects。它只是工作,没有惊喜。
    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 2021-03-29
    • 2014-07-03
    • 2011-03-20
    • 2015-01-02
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    相关资源
    最近更新 更多