Hibernate配置类的java.lang.NoSuchMethodError仅在Tomcat上发布

时间:2014-09-13 12:29:34

标签: java hibernate tomcat struts nosuchmethoderror

我正在制作我自己的Struts_1.2 + Log4J2_2.0.2 + Hibernate_4.3.6项目。我创建了一个简单的DAO类并在本地环境中运行(简单的java类作为本地Java应用程序运行),并且它的工作效率很高。

现在我只是从Action Controller中调用了相同的DAO类,即使JSP将数据发送到Action Controller然后将数据传输到DAO,服务器是Tomcat 7.x,当我尝试运行时,它说< / p>

java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;

我无法理解的是没有Tomcat(本地应用程序)运行的相同代码,但是当涉及到Tomcat时,它无法在类中找到该方法。

我检查了jar,它包含文件,该文件也有方法(没有编译器错误)

如果有人能帮助我,我将非常感激。

的Maven(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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>TestApp</groupId>
    <artifactId>TestApp</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <name>TestApp</name>
    <description>Website</description>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>struts</groupId>
            <artifactId>struts</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.6.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.12</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.12</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-common</artifactId>
            <version>2.12</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>2.12</version>
        </dependency>
    </dependencies>
</project>

DAO(爪哇):

public void saveHitCountInDB(HitCount count) {
        session.update(count);
        session.flush();
 }

POJO(爪哇):

@Entity
@Table(name = "hitcounter")
public class HitCount {
     @Id
     @Column(name = "count", unique = true, nullable = false)
     private int hitCount;
     //getter and setter and constructors
}

连接(爪哇):

configuration = new Configuration().configure();
configuration.addAnnotatedClass(HitCount.class); //problem reported here

注意:如果需要更多代码,请与我们联系。

2 个答案:

答案 0 :(得分:1)

  1. 在eclipse中,您的项目名称和“属性”对话框。
  2. 左侧菜单选择“部署程序集”
  3. 右侧窗口“Web部署程序集”和“添加”按钮。
  4. 搜索并选择“Maven Dependencies”并添加。(如果您手动添加jar-lib也是如此。)
  5. 现在你的eclipse“Run As”时间Tomcat正确部署项目依赖jar。

    我希望你能解决问题。

    祝你好运。

答案 1 :(得分:0)

@ Ankur-Singhal感谢您的快速支持,但我想到了解决方案。

解决方案:当我在POM.XML中切换Hibernate依赖项之间时,它下载了一个旧版本的hibernate jar(版本3.x.x中的某个地方)并且除了一个位置外无处可用 .metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \ TestApp \ WEB-INF \ lib中

因此,当我在eclipse中运行项目时,它与不同的版本发生冲突,当我导出它时,会有正确的版本导出。

我关闭了Eclipse,删除了lib文件夹,打开了eclipse,并重新构建了它。

而不是它的工作正常。

我希望这也有助于其他人。

更多信息:
- 我的项目文件夹不在eclipse工作区文件夹中 - 我的maven存储库位于不同的位置
- 我的Tomcat位于eclipse的外部位置

所以我得出的结论是,如果有任何类型的jar不匹配,项目有maven并且没有保存在ecplise工作区内,那么我们所有的lib文件都保存在3个不同的位置: -
1)目标项目文件夹中的目标\\ WEB-INF \ lib文件夹
2)maven存储库(对于windows,%user%。m2 \ repository \
3)保存在Eclipse工作区的.metdata文件夹内的项目文件夹中