当前位置: 代码迷 >> Java相关 >> maven学习(2)
  详细解决方案

maven学习(2)

热度:96   发布时间:2016-04-22 20:09:26.0
maven学习(二)

  晚上在eclipse上安装了m2eclipse插件,然后使用maven创建了一个小项目测试了一下,但是测试的时候出现了几个问题,现在简单总结一下:

项目是添加hibernate支持,然后使用junit测试添加一条数据。

项目结构如下:

看到这个结构大家可能会奇怪为什么测试的资源包中也有hibernate的配置文件,

这要是我要说的第一个问题junit测试的时候如果测试资源包中没有hibernate的配置文件,那么maven就报错,说找不到hibernate的配置文件

如下所示:

java.lang.ExceptionInInitializerError    at lizm.pro.user.dao.UserDao.<init>(UserDao.java:11)    at lizm.pro.user.dao.TestUserDao.testAdd(TestUserDao.java:13)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found    at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2095)    at org.hibernate.cfg.Configuration.configure(Configuration.java:2076)    at org.hibernate.cfg.Configuration.configure(Configuration.java:2056)    at lizm.pro.user.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)    at lizm.pro.user.util.HibernateUtil.<clinit>(HibernateUtil.java:10)    ... 31 more

问了下度娘,度娘给的最好的解决办法就是在测试的资源包中也加入hibernate的配置文件

 

 

问题二、mysql包的版本问题

  在楼主千辛万苦终于把找不到hibernate配置文件的问题解决以后,以为可以愉快的和maven玩耍了,谁知道又出现了第二个问题,第二个问题是这个样子的:

Hibernate: insert into _user (cnname, passWord, userName) values (?, ?, ?)org.hibernate.exception.GenericJDBCException: could not execute statement    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3558)    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:98)    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:492)    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:197)    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181)    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216)    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:334)    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289)    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)    at lizm.pro.user.dao.UserDao.add(UserDao.java:19)    at lizm.pro.user.dao.TestUserDao.testAdd(TestUserDao.java:15)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)Caused by: java.sql.SQLException: Could not retrieve transation read-only status server    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:937)    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:872)    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:904)    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:894)    at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3613)    at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3582)    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2111)    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2081)    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2066)    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)    ... 52 moreCaused by: java.sql.SQLException: Unknown system variable 'tx_read_only'    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2531)    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2489)    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1446)    at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3607)    ... 57 more

SQL语句是出来了,但是没有测试成功,开始还以为是事务提交搞错了,但是仔细一看是JDBC异常,肯定跟事务没什么亲戚了,所以就继续问度娘这个异常是什么鬼,然后就看到多位大神的回答是包的版本问题,一看我的mysql包,我去,是最新的,5点多的啊,这个怎么会有问题呢?心想是不是我的问题跟人家的不一样啊,抱着试一试的态度把mysql的包换成了3点多,一试竟然成功了。

  开始使用maven的时候还为能使用最新的JAR包而兴奋,现在想想还真不是那么回事,使用新的东西是没错,但是稳定版本可能更好 吧,所以以后就不用最新的,但是也要使用尽可能新的版本