SSH整合jar包冲突问题

时间:2022-06-05 00:02:43
 

 ssh2 jar包配置

本文中ssh指:struts2,srping2.5,hibernate3.2

 struts2必须JAR包(6个):
 struts2-spring-plugin-2.0.11.2.jar
 xwork-2.0.5.jar
 struts2-core-2.0.11.2.jar
 freemarker-2.3.8.jar
 ognl-2.6.11.jar
 commons-logging-1.0.4.jar(与hibernate3.2必须JAR包重复,取一个既可)
 
 hibernate3.2必须JAR包(8个):
 antlr-2.7.6.jar
 commons-collections-2.1.1.jar
 commons-logging-1.0.4.jar
 dom4j-1.6.1.jar
 ehcache-1.2.3.jar
 hibernate3.jar
 jta.jar
 log4j-1.2.11.jar
 
 spring2.5必须JAR包(5个):
 spring.jar
 asm-2.2.2.jar (*)
 asm-commons-2.2.2.jar (*)
 asm-util-2.2.2.jar (*)
 cglib-nodep-2.1_3.jar (*)

 以上四个标*的jar包,hibernate,spring都有提供,但是一定要用spring下的,不然当部署到tomcat下,应用启动的时候会报如下错误:(血的教训啊)
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name ’sessionFactory’ defined in  ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is   net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException–>null
 另外:tomcat的缓存常常会出问题,你明明更新了,可是始终启动不了,这时你可以试着重启一下tomcat。

(activation.jar;antlr-2.7.2.jar;antlr-2.7.6.jar;asm.jar;cglib-2.1.3.jar;commons-beanutils-1.6.jar;commons-chain-1.1.jar;
commons-collections-2.1.1.jar;commons-digester-1.8.jar;commons-logging-1.0.4.jar;commons-logging-api-1.1.jar;commons-validator-1.3.0.jar;dom4j-1.6.1.jar;ehcache-1.2.jar;file.txt;freemarker-2.3.8.jar;hibernate3.jar;jstl.jar;jta.jar;log4j-1.2.11.jar
log4j-1.2.15.jar;mail.jar;mysql-connector-java-5.0.4-bin.jar;mysql-connector-java-5.0.7-bin.jar;ognl-2.6.11.jar;oro-2.0.8.jar;spring.jar;standard.jar;struts-core-1.3.8.jar;struts-extras-1.3.8.jar;struts-taglib-1.3.8.jar;struts-tiles-1.3.8.jar;)


Dos命令窗口中,开始->运行->cmd打开窗口,到需要文件名的目录,用dir /B > file.txt就可以完成了。然后打开file.txt,Cut and Paste到你想放的位置。呵呵,是不是很简单呀。

 

本文来自****博客,转载请标明出处:http://blog.****.net/yiyiyi345/archive/2009/10/04/4631610.aspx

 

 

 

Error one:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
Caused by:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

原因:
  在夏昕写的spring开发指南里,如果学习使用dbcp配置的时候,可能会发生这样一个错误: 连数据库连接池的时候发生了java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
      该问题的产生是由于没有引入dbcp所依赖jar文件,看看apache官方的申明:“Commons-DBCP depends at runtime on commons-pool and commons-collections”。


解决方法:

在eclipse里面将这两个jar文件引入,ok,问题解决。


Error two:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)


原因:

在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
Hibernate使用如果lib:
asm.jar
asm-attrs.jar
其中asm-2.2.2.jar与asm.jar存在类上的冲突!!!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。

解决方法:

1.去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.2.jar
2.加入Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar

自己的一个小测试: (运行环境:apache-tomcat-5.5.15 + .MyEclipse_5.5GA_E3.2.2 )
整合ssh项目中, 在 Tomcat 部署的环境中 D:/tomcat/webapps/my/WEB-INF/lib 发生了点异常:同时有 asm.jar、asm-attrs.jar、asm-2.2.3.jar 、 asm-commons-2.2.3.jar
asm-util-2.2.3.jar、 cglib-nodep-2.1_3.jar     在启动tomcat中不会出现异常信息。(我想asm-2.2.3jar可能在一定程度上作了改进。)

当 在D:/tomcat/webapps/my/WEB-INF/lib 下加入 cglib-2.1.3.jar 会报上面的java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit错误信息。 说明cglib-2.1.3.jar与其它包发生了冲突。

Error three:

at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:408)
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: net/sf/hibernate/Session
java.lang.NoClassDefFoundError: net/sf/hibernate/Session  at java.lang.Class.getDeclaredMethods0(Native Method)

原因 :
在写dao 时,导入包出错了!
import org.springframework.orm.hibernate.support.HibernateDaoSupport;

解决方法:注意在导包时,要仔细了!

package com.jhl.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.jhl.po.User;

public class UserDao extends HibernateDaoSupport {

    public void save(User user) {

        this.getHibernateTemplate().save(user);
    }
}

 

Error four:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass
Caused by:
java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass


原因:hibernate3.jar和hibernate-annotations.jar)的问题。


解决方法:把hibernate-annotations.jar直接去掉就OK了!


总结:

运行环境:apache-tomcat-5.5.15 + .MyEclipse_5.5GA_E3.2.2

我觉得报以上种种的原因:主要是在spring version的选择上,最好选择 spring version 1,若选spring version 2(最容易报这样和那样的错了)
它下面的(spring1.2 AOP Libraries 、spring 1.2 Core Libraries、spring 1.2 ORM/DAO/Hibernate3Libraries、spring 1.2 Web Libraries)

struts1.2 + spring 1 + Hibernate3.1

本文来自****博客,转载请标明出处:http://blog.****.net/jihuanliang/archive/2008/04/22/2316223.aspx

 

 

 

你在加的时候按这个顺序来加Struts--Spring--Hibernate,有重复包的时候不要替换就没问题了
方法一:
在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar

Hibernate使用如果lib:
asm.jar
asm-attrs.jar


其中asm-2.2.2.jar与asm.jar存在类上的冲突!!!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。


解决办法是:
1.去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar

2.加入Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar





方法二:
在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar

Hibernate使用如果lib:
asm.jarasm-attrs.jar
其中asm-2.2.2.jar与asm.jar存在类上的冲突。
使用其中之一或两者都使用,可能会出现如下错误: java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitorjava.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitorjava.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit

下面是解决方法手工编辑你的.classpath文件,比如我这个(只有部分内容)

<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_CORE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_DAO"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_WEB"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_1_CORE"/>
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java-5.0.4-bin.jar"/>

将最后2行hibernate和mysql驱动,手工复制到springframework的lib前面。
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_1_CORE"/>
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java-5.0.4-bin.jar"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_CORE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_DAO"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_WEB"/>

现在你再试试启动,应该不会报错了。

我这里用了myeclipse的jar包。如果你是自定义用户库jar包,那么只要保证spring的jar包在hibernate之后加载,项目在部署的时候spring的jar包就会覆盖掉hibernate的jar包。
源自javaeye  今天联系三大框架的整合,我先加了struts框架,建了一个login.jsp;一个LoginForm.java和一个LoiginAction.java

第二步我又加入spring框架。最后我加入的hibernage框架。利用逆向工程生成了.hbm文件和User.java文件等。可是运行服务器发布的时候就是出错。严重: action: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionfactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor

我用的是MyEclipse 5.5.1 GA开发的,struts1.2+spring2.0+hibernate3.1.

怀疑是包冲突的问题,还是MyEclipse 版本的问题?
answer。1 sessionfactory 创建有问题,

org/objectweb/asm/CodeVisitor  没有找到这个类

1.没有导入asm.jar
2.导入了多个不同版本的asm-XXXX.jar
answer。2 在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
Hibernate使用如下lib:
asm.jar
asm-attrs.jar
其中asm-2.2.2.jar与asm.jar存在类上的冲突!!!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。
解决办法是:
1.去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
2.加入Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar
asnwer3 我先把3个框架搭建的顺序给你说一下 你再重新搭建一下吧

1,首先加入add Spring
2,add Hibernate
3,add Struts1或者struts2

这样的话 接下来就是你配置文件事情了 。。。。

首先你配置顺序出错 的话肯定搭建不起来。。

详细的就不说了   比较繁琐 但很简单
answer4 如果需要高级的应用再选上hibernate 3.1 Advanced Support libraries
如果要将hibernate-config.xml和applicationContext.xml整合的话,就在接下来选择spring configuration file(applicationContext.xml)

这一项。
  如果选择了整合在一起的话,就在接下来点选existing spring configuration file这一项。
  最后一步,就是在配置数据源的文件里把驱动的类改一下,就是把“org.apache.commons.dbcp.BasicDataSource”改成

“org.springframework.jdbc.datasource.DriverManagerDataSource”。
再把asm.jar 这个包从项目的加载路径里面删除就行了。
至于加载配置文件,就不详细的说了,方法很多,只要保证都在项目启动的时候加载上了就行啦