maven学习(二)

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

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

项目结构如下:

maven学习(二)

看到这个结构大家可能会奇怪为什么测试的资源包中也有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 more

Caused 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包而兴奋,现在想想还真不是那么回事,使用新的东西是没错,但是稳定版本可能更好 吧,所以以后就不用最新的,但是也要使用尽可能新的版本

你可能感兴趣的:(maven)