首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Receiver类org.apache.struts2.tiles.StrutsTilesInitializer不定义或继承已解析方法createContainerFactory的实现。

Receiver类org.apache.struts2.tiles.StrutsTilesInitializer不定义或继承已解析方法createContainerFactory的实现。
EN

Stack Overflow用户
提问于 2022-05-26 19:10:21
回答 1查看 168关注 0票数 0

有人能告诉我一个可能的解决方案吗?我们正在将一个非常老的Struts2.3/Spring4/ Hibernate 4应用程序迁移到Struts 2.5.30 /Hibernate 5.2.1 /Spring5.2.21。此外,遗留应用程序有Tiles 2.2.2,我们还没有对其进行修改。我们保持瓷砖2.2.2的原样。

代码语言:javascript
运行
复制
<properties>
    <log4j.version>2.17.2</log4j.version>
    <java.version>11</java.version>
    <finalName>oar</finalName>
    <spring.version>5.2.21.RELEASE</spring.version>
    <hibernate.version>5.2.1.Final</hibernate.version>
    <struts.version>2.5.30</struts.version>
    <tiles.version>2.2.2</tiles.version>
</properties>

使用这些Maven依赖项,当应用程序启动时,我得到以下错误:

代码语言:javascript
运行
复制
java.lang.AbstractMethodError: Receiver class org.apache.struts2.tiles.StrutsTilesInitializer
   does not define or inherit an implementation of the resolved method 'abstract
   org.apache.tiles.factory.AbstractTilesContainerFactory 
   createContainerFactory(org.apache.tiles.TilesApplicationContext)' 
   of abstract class org.apache.tiles.startup.AbstractTilesInitializer.

全堆栈跟踪:

代码语言:javascript
运行
复制
java.lang.AbstractMethodError: Receiver class org.apache.struts2.tiles.StrutsTilesInitializer does not define or inherit an implementation of the resolved method 'abstract org.apache.tiles.factory.AbstractTilesContainerFactory createContainerFactory(org.apache.tiles.TilesApplicationContext)' of abstract class org.apache.tiles.startup.AbstractTilesInitializer.
    at org.apache.tiles.startup.AbstractTilesInitializer.createContainer(AbstractTilesInitializer.java:123)
    at org.apache.tiles.startup.AbstractTilesInitializer.initialize(AbstractTilesInitializer.java:70)
    at org.apache.tiles.web.startup.AbstractTilesListener.contextInitialized(AbstractTilesListener.java:62)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4753)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5215)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)

根据上面的版本属性,相关的Struts & Tiles依赖项如下。请注意,struts2 2-tiles-plugin包含,其版本与属性2.5.30相同。(我的理解是,还有一个更新的支柱-2-tiles3-plugin,但我不使用它,因为我们的瓷砖保持在2.2.2。)问题是我们是否保留了与Struts2.5.30不兼容的Tiles 2.2.2?我们不想切换到Tiles 3,因为有很多不同(例如,useAttribute已经改变了)。

代码语言:javascript
运行
复制
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>${struts.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-json-plugin</artifactId>
        <version>${struts.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>${struts.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-tiles-plugin</artifactId>
        <version>${struts.version}</version>
    </dependency>
            
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-convention-plugin</artifactId>
        <version>${struts.version}</version>
    </dependency>
    
    <dependency>
        <groupId>com.jgeppert.struts2.jquery</groupId>
        <artifactId>struts2-jquery-plugin</artifactId>
        <version>4.0.3</version>
    </dependency>
            
    <dependency>
        <groupId>com.jgeppert.struts2.bootstrap</groupId>
        <artifactId>struts2-bootstrap-plugin</artifactId>
        <version>2.5.2</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-api</artifactId>
        <version>${tiles.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-core</artifactId>
        <version>${tiles.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-el</artifactId>
        <version>${tiles.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-freemarker</artifactId>
        <version>${tiles.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-jsp</artifactId>
        <version>${tiles.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-ognl</artifactId>
        <version>${tiles.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-servlet</artifactId>
        <version>${tiles.version}</version>
    </dependency>
            
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-template</artifactId>
        <version>${tiles.version}</version>
    </dependency>
EN

Stack Overflow用户

发布于 2022-06-07 14:58:33

Struts 2框架使用了一个插件来与Tiles框架集成。Tiles 2的插件是支柱2- Tiles - plugin,而Tiles 3的插件是struts2 2-tiles3-plugin。您不应该在pom.xml中定义Tiles的版本,因为它是从每个插件的传递依赖项中产生的。请看this答案,它提供了与Tiles集成的示例链接。注意版本是如何定义的

代码语言:javascript
运行
复制
<struts2.version>6.0.0-RC3</struts2.version>

代码语言:javascript
运行
复制
<dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-tiles-plugin</artifactId>
            <version>${struts2.version}</version>
        </dependency>

如果您在配置中单独指定了Tiles版本,那么它可能与插件依赖项中的一个版本不兼容,并且您可能已经将其导出以解决错误。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72396865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档