`
ll_feng
  • 浏览: 391286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mvn and ssh融合问题及解决办法

    博客分类:
  • j2ee
阅读更多
通过maven融合ssh(struts2+spring2.5+hibernate3.3)是比较容易的事情。但也会出现一些问题需要注意的。
一、在tomcat启动时报错:
严重: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [D:\lvlf\workspace\ssh\target\ssh\WEB-INF\classes\applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
...
Caused by: java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
...

原因分析:
jar文件版本冲突.从网上查询得知类: org.slf4j.impl.StaticLoggerBinder在slf4j-api 中是类的公有静态变量,而在slf4j-log4j12(slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar其中之一)中确是私有变量
解决办法:
在类路径先将slf4j-api.jar 删除,再导入同版本的slf4j-api-1.5.6.jar 和slf4j-log4j12-1.5.6.jar 具体到maven上就是加上:
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.5.6</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.5.6</version>
</dependency>


二、注解驱动下的DAO无法继承HibernateDaoSupport类
可以在当前dao中为父类注入sessionFactory.如:
@Repository("userDao")
public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {
	
	private SessionFactory sessionFactory;
	@Autowired  
	public void setSessionFactory0(SessionFactory sessionFactory){   
	  super.setSessionFactory(sessionFactory);   
	}


}


三、实体对象无法持久化
报错:org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity:...
Caused by: org.hibernate.MappingException: Unknown entity: cn.lvlf.ssh.demo.model.User...
原因分析:如果工程里存在不同的spring版本,也可能报错。但我这里经排查应是配置的问题。
解决办法:
最终还是配置错误。原先的hibernate配置为:
<property name="packagesToScan" >
<list>
<value>cn.lvlf.ssh.demo.model.*</value>
</list>
</property>

其实就错在这里。packagesToScan是要指定包名的。而我这里cn.lvlf.ssh.demo.model下就是实体类了。没有包了。所以将“*”去掉即可。或是将*的位置前移一位:cn.lvlf.ssh.demo.*也可。
哎,困扰多天了。原来如此!



四、关于不能在mvn -o package时自动生成数据库的问题
原以为现在可以在spring配置文件里用packageToScan属性指定实体类了,就不再需要hibernate.cfg.xml中注册实体类了。其实不是这样。反复试验证实hibernate.cfg.xml文件必不可少。不过感觉代码运行期不关它的事。它只在运行maven的hibernate插件maven-hibernate-plugs运行时和HibernateTools运行实用得上。所以我们仍然需要将所有的实体注册到hibernate.cfg.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="sessionFactory">
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">1234</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <property name="hibernate.hbm2ddl.auto">create-drop</property>
        
        <mapping class="cn.lvlf.ssh.demo.model.User"/>
    </session-factory>
</hibernate-configuration>


另外,pom.xml中好象也不需要显示的指定hibernate.cfg.xml.
<plugin>
		        <groupId>org.codehaus.mojo</groupId>
		        <artifactId>hibernate3-maven-plugin</artifactId>
		        <version>2.2</version>
		        <executions>
		          <execution>
		            <phase>process-classes</phase>
		            <goals>
		              <goal>hbm2ddl</goal>
		            </goals>
		          </execution>
		        </executions>
		        <dependencies>
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>5.1.6</version>
					</dependency>
				</dependencies>
				<configuration>
					<components>
						<component>
							<name>hbm2ddl</name>
							<implementation>annotationconfiguration</implementation>
						</component>
					</components>
					<componentProperties>
						<drop>true</drop>
						<jdk5>true</jdk5>
						<skip>${maven.test.skip}</skip>
					</componentProperties>
				</configuration>
      		</plugin>


当当然也可以将hibernate.cfg.xml中的hibernate属性配置移植到一个专有文件中如,jdbc.properties
jdbc.driverClassName=${jdbc.driverClassName}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}


# Needed by Hibernate3 Maven Plugin defined in pom.xml
hibernate.dialect=${hibernate.dialect}
hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}
hibernate.connection.username=${jdbc.username}
hibernate.connection.password=${jdbc.password}
hibernate.connection.url=${jdbc.url}
hibernate.connection.driver_class=${jdbc.driverClassName}


那么,在maven-hibernate-plugin中就要加上如下配置了:
<componentProperties>
...				
<propertyfile>target/ssh/WEB-INF/classes/jdbc.properties</propertyfile>
...
</componentProperties>

这样,maven-hibernate-plugin就会去jdbc.properties中读取相关的hibernate属性并在自动搜索到的hibernate.cfg.xml中查找要处理的实体类了。
分享到:
评论

相关推荐

    ssh的做简单的maven的配置文件

    你可以通过执行简单的命令,如`mvn compile`进行编译,`mvn test`运行单元测试,`mvn package`打包项目,甚至`mvn deploy`将应用发布到服务器。Maven的生命周期和构建插件使得这些任务能够自动化执行,极大地提高了...

    SSH包冲突问题解决_sqlserver

    ### SSH包冲突问题解决_sqlserver #### 背景与问题描述 在开发基于SSH(Struts、Spring、Hibernate)框架的应用程序时,经常会遇到由于不同框架之间或框架内部依赖库版本不一致导致的包冲突问题。这类问题往往表现...

    mvn 常用命令手册mvn开发必备

    这有助于解决因为配置不兼容导致的问题。 #### 13. `mvn eclipse:eclipse` 同样用于生成Eclipse项目文件,但这里的命令更简洁。它会根据项目的配置自动生成所需的Eclipse项目文件。 #### 14. `mvn deploy:deploy-...

    Java SSH 框架整合,学习源码

    6. **学习资源**:"mvn_ssh_01"可能包含的是一个基于Maven构建的SSH项目实例,其中可能包括了配置文件、源代码、测试用例等,是学习SSH整合的好材料。通过分析这个项目,可以更直观地了解SSH如何协同工作,以及如何...

    mvn.bat文件

    mvn.bat

    maven SSH Flex 日志查询

    利用Maven搭建的Java SSH框架后台,利用Flex显示 利用Maven搭建的Java SSH框架后台,利用Flex显示 利用Maven搭建的Java SSH框架后台,利用Flex显示 利用Maven搭建的Java SSH框架后台,利用Flex显示 利用Maven搭建的...

    Mvn常用命令总结

    掌握Maven的基本使用方法对于进行Java项目的开发和维护至关重要。本文将详细介绍Maven中常用的命令及其应用场景。 #### 1. 显示Maven版本信息:`mvn -v` 该命令用于查看当前系统上安装的Maven版本以及Java版本等...

    mvn install:install-file -Dfile

    mvn install单独jar到仓库使用方法举例

    mvn常用命令行

    Maven 的强大之处在于其插件机制,`mvn jetty:run` 可以直接将项目部署到 Jetty 服务器运行,`mvn deploy:deploy-file` 用于上传自定义的 JAR 文件到远程仓库。 总之,理解并熟练使用这些 Maven 命令行,将有助于你...

    java+mvn爬虫

    通过设置请求方法(GET、POST等)和请求头,我们可以与服务器进行交互。 3. HTML解析:Java中有多种库可以解析HTML,如Jsoup,它提供了便捷的API来抓取和操作HTML文档,查找元素、提取文本、修改内容等。 二、...

    mvn release 配置说明

    `mvn release`是Maven项目管理工具中的一个插件,用于执行软件版本的发布流程。这个流程通常包括准备发布的新版本,创建源码和二进制的归档,然后在版本控制系统中提交这些更改。在本文中,我们将深入探讨`mvn ...

    Cmd执行mvn clean package 命令使用文档

    #### 六、常见问题与解决办法 - **错误:找不到或无法加载主类**:检查项目配置文件pom.xml中是否有遗漏的依赖项,或者是否正确指定了主类的位置。 - **错误:缺少资源文件**:确认项目的资源文件是否放在正确的目录...

    mvn配置命令文档

    ### Maven配置与常用命令详解 ...以上内容涵盖了Maven的基础配置及常见命令的使用方法,同时对POM文件的关键元素进行了详细介绍。通过这些内容的学习,可以帮助开发者更好地理解和使用Maven进行项目构建与管理。

    mvn常用命令

    MVN常用命令 MVN(Maven)是一款基于项目对象模型(POM)的项目管理工具,它可以帮助开发者管理项目的依赖关系、编译、测试、打包和部署。下面是MVN的常用命令: 创建Maven项目 1. 创建Maven的普通Java项目:`mvn...

    mvn-download

    在Java开发过程中,Maven(MVN)是一个广泛使用的依赖管理工具,它使得开发者能够方便地管理和构建项目。"mvn-download"这个话题是关于如何通过Maven的命令行工具来下载特定的JAR(Java Archive)包。下面将详细解释...

    maven内存溢出解决放啊

    #### 三、解决内存溢出问题的方法 ##### 3.1 Windows环境 在Windows操作系统中,可以通过修改Maven的启动脚本来增加内存限制。具体步骤如下: 1. **定位文件**:找到Maven安装目录下的`bin`文件夹内的`mvn.bat`...

    maven搭建SSH工程

    【标题】:“Maven搭建SSH工程” 在Java开发领域,SSH(Struts、Spring、Hibernate)是一个常见的Web应用开发框架组合。它结合了Struts的MVC设计模式、Spring的依赖注入以及Hibernate的对象关系映射功能,使得开发...

    匹处理mvn命令用法

    5. **解决依赖冲突**:当多个依赖有相同的包但版本不同时,Maven的依赖解析机制会按照“最接近原则”选择版本。如有冲突,可以在pom.xml中使用`&lt;exclusions&gt;`标签排除不需要的依赖。 6. ** profiles**:profiles...

    Maven的简单使用以及Maven搭建SSH

    ** Maven的简单使用以及Maven搭建SSH ** Maven是一个强大的Java项目管理工具,它能够帮助开发者构建、管理和部署项目。Maven通过使用一个统一的项目对象模型(Project Object Model,POM)来描述项目,并利用插件...

Global site tag (gtag.js) - Google Analytics