我正在制作我自己的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
注意:如果需要更多代码,请与我们联系。
答案 0 :(得分:1)
现在你的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文件夹内的项目文件夹中