【问题标题】:Spring 3 MVC and Apache Tiles 2 Integration ErrorSpring 3 MVC 和 Apache Tiles 2 集成错误
【发布时间】:2011-02-15 13:06:24
【问题描述】:

我一直在尝试将 Spring(3.0.4 和 3.0.5)MVC 与 Apache Tiles(2.1.2、2.1.4 和 2.2.2)集成,但无济于事。在每种情况下,我都会收到以下错误:

java.lang.NoClassDefFoundError: org/apache/tiles/startup/BasicTilesInitializer

根据 Tiles 文档,BasicTilesInitializer 已被弃用。我认为 Spring 的 TilesConfigurer 的最新版本会引用正确的类,但它没有,我仍然得到同样的错误。

我正在使用以下配置在我的 spring mvc 应用程序中设置 Tiles:

<beans:bean 
    id="tilesConfigurer" 
    class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <beans:property name="definitions">
        <beans:list>
            <beans:value>/WEB-INF/tiles/tiles.xml</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

<beans:bean 
    class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">      
    <beans:property 
        name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>                
</beans:bean>

理想情况下,我想让 Spring 3.0.5 与 Tiles 2.2.2 一起使用。它们是本文的最新版本。

【问题讨论】:

    标签: spring spring-mvc tiles


    【解决方案1】:

    对于图块 3,使用类 org.springframework.web.servlet.view.tiles3.TilesConfigurer。确保您在 spring webmvc 中拥有它。

    【讨论】:

      【解决方案2】:

      org.apache.tiles.startup.BasicTilesInitializer 是tiles-core(2.2.1).jar 的一个类。检查您是否已部署 tiles-core jar

      【讨论】:

      • @Athens,您是否检查过该类是否在 jar 中?您是否检查过该 jar 是否真的部署到您的应用程序服务器?
      • 我正在使用 SpringSource 工具套件,并且在检查引用的 jar 时能够看到该类。我没有部署到远程服务器。当我通过 Debug As->Debug on Server 在调试模式下运行应用程序时出现错误。您认为这是配置问题吗? Spring 3 是否支持 Tiles 2.2.2?根据 Spring 的 TilesConfigurer (static.springsource.org/spring/docs/3.0.x/javadoc-api/org/…) 的文档,它是。我只是没有成功。
      • @Athens:如果你的 App Server 是 Tomcat,那么 STS/Eclipse 会将文件放在项目的 metaata 目录中:.metadata\.plugins\org.eclipse.wst.server.core\tmp&lt;0&gt;\wtpwebapps\&lt;Applciation&gt;\WEB-INF\lib - 检查这个目录是否有 jar 在其中(我猜测其他服务器类似)
      • 事实证明,我所要做的就是将文件添加到我的 STS 项目中的 WEB-INF\lib 文件夹中。我已经将它们添加到构建路径并假设它们将与其余的 WEB-INF 工件一起部署。这是一个艰难的教训。再次感谢您的帮助。
      • @Athens:(它接缝你没有使用 maven):你应该将所有运行时所需的 jar 放在 WEB-INF\lib 文件夹中,然后你不能添加它们(第二次)明确您的项目。
      【解决方案3】:

      如果你使用的是maven,那么你可以添加这个依赖来解决问题:

      <dependency>
           <groupId>org.apache.tiles</groupId>
           <artifactId>tiles-servlet</artifactId>
           <version>2.2.2</version>
      </dependency>  
      

      【讨论】:

        【解决方案4】:

        我不会为恢复过时的线程而道歉。

        我有一个在 Eclipse Helios 中构建的 Spring MVC 项目。
        我关闭了 Helios 几天,然后今天重新打开。当我运行我的应用程序时,我遇到了与上面相同的异常:java.lang.NoClassDefFoundError: org/apache/tiles/startup/BasicTilesInitializer。

        我的解决方案是清理集成 Tomcat 服务器上的部署目录,然后重新部署应用程序。我第一次重新部署时,我的应用程序的 lib 目录只显示了两个 jar。因此,在再次清理和重新部署之后,它得到了所有必要的 jar,现在我的应用程序再次运行。去图吧。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题,使用的是 2.2.2 版的瓷砖。我切换到版本 2.2.1 并开始工作。这是我的依赖项:

          <dependency>
                  <groupId>org.apache.tiles</groupId>
                  <artifactId>tiles-jsp</artifactId>
                  <version>2.2.1</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.tiles</groupId>
                  <artifactId>tiles-core</artifactId>
                  <version>2.2.1</version>
                  <scope>compile</scope>
              </dependency>
              <dependency>
                  <groupId>org.apache.tiles</groupId>
                  <artifactId>tiles-api</artifactId>
                  <version>2.2.1</version>
                  <scope>compile</scope>
              </dependency>
              <dependency>
                  <groupId>org.apache.tiles</groupId>
                  <artifactId>tiles-servlet</artifactId>
                  <version>2.2.1</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.tiles</groupId>
                  <artifactId>tiles-template</artifactId>
                  <version>2.2.1</version>
              </dependency>
          

          【讨论】:

            【解决方案6】:

            如果您使用的是 STS,并且您使用 spring 模板项目(如 MVC 项目)创建了项目,那么您无需向 lib 目录添加任何内容。相反,您修改 pom.xml maven 配置文件。

            【讨论】:

              【解决方案7】:

              我只能在我的 POM 中添加编译时提供的依赖项后才能解决这个问题

              <scope>compile</scope>
              

              【讨论】:

                【解决方案8】:

                检查以下 jars 是否在应用程序类路径上:

                1. commons-beanutils
                2. commons-digester
                3. log4j
                4. slf4j-api
                5. slf4j-log4j12
                6. tiles-api
                7. 瓷砖核心
                8. tiles-jsp
                9. tiles-servlet
                10. 瓷砖模板

                tile jar 的版本取决于 Spring MVC 的版本。例如。如果使用 Spring MVC 3.2.3 (org.springframework.web.servlet.view.tiles3.TilesConfigurer),则需要 tile 3 jars。

                【讨论】:

                  【解决方案9】:

                  对于瓷砖 3,您应该添加

                  tiles-request.jar, commons-digester.jar

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-10-01
                    • 1970-01-01
                    • 2010-09-24
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-01-28
                    相关资源
                    最近更新 更多