求助:在eclipse上写的程序能运行,用exe4j生成exe文件出错,求解!!!

qiananlihp 2018-08-08 07:18:14
学习java中,在eclipse上写的程序,用spring+mybatis,通了,然后导出jar,用exe4j 生成exe文件,执行后报错。错误如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [mapper.MemberMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(type=class java.lang.Object, mappedName=, shareable=true, lookup=, authenticationType=CONTAINER, description=, name=)}
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:306)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1120)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:94)
at gui.main.MainFrame.initContext(MainFrame.java:106)
at gui.main.MainFrame.<init>(MainFrame.java:92)
at gui.login.LoginFrame$1.widgetSelected(LoginFrame.java:97)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at gui.login.LoginFrame.open(LoginFrame.java:47)
at gui.login.LoginFrame.main(LoginFrame.java:32)
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 com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
at com.exe4j.runtime.WinLauncher.main(Unknown Source)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [mapper.MemberMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(type=class java.lang.Object, mappedName=, shareable=true, lookup=, authenticationType=CONTAINER, description=, name=)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:818)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:730)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:438)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:416)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:550)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303)
... 28 more


我理解着应该是:因为service中注入了Mapper,我的Mapper只是接口,没有实现类,applicationContext中没有配置bean,可是mybatis不是不用写实现类么?
配置文件存放的位置问题吗?(传图片太慢,目录结果如下)
manager.jar
manager.exe
log4j.properties
SqlMapConfig.xml
db.properties
mybatis
--SqlMapConfig.xml
Spring
--applicationContext-*.xml
lib
img

求大神解惑!!

最后,都不知道这个问题是不是应该放在这个版块。。。
...全文
330 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mingyueyixi 2018-08-15
  • 打赏
  • 举报
回复
如果我没记错(很久以前了,不确定),exe4j转出来的exe实际上就是个jar,只是后缀变了。如果你的jar本来就不能跑,转成exe后也是不行的。
qiananlihp 2018-08-15
  • 打赏
  • 举报
回复
引用 3 楼 qq_35050756 的回复:
[quote=引用 2 楼 qiananlihp 的回复:]
[quote=引用 1 楼 qq_35050756 的回复:]
我以前似乎听同事说过这个问题 问题是打包之后的存放的路径和在调试的时候 不一样
那时候好像是在pom.xml里面设置一些参数就可以了


谢谢解答,pom.xml是maven项目的配置文件吗?还没学呢。。。我写的不是maven项目,按照您的思路又查了一些资料,但是按照那些方法似乎还是不行,我查到的方法是:在classpath后面加上*,即:classpath*:XXX/XXX/XX.xml,这样eclipse是出错的,然后导出后还是报错。

我获取applicationContext的方法如下:
String[] args = new String[] {
"spring/applicationContext-dao.xml",
"spring/ApplicationContext-service.xml",
"spring/ApplicationContext-transaction.xml" };
ApplicationContext actx = new ClassPathXmlApplicationContext(args);
这个似乎是没有问题的,找到了这些配置文件,配置sqlSessionFactory如下:
<!-- 加载mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
SqlMapConfig.xml中配置了别名。似乎就有问题了,因为报错:原因是别名不识别,改为全限定名就可以了,然后又出现上面的错误。
用扫描mapper的方法获取mapper:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,每个包中间使用半角逗号分隔 -->
<property name="basePackage" value="mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
******我想问题应该是:没有找到SqlMapConfig.xml和*Mapper.xml文件。

还有一个情况是:我不用上面扫描mapper包的方法配置mapper,即在SqlMapConfig中配置Mappers,然后在applicationContext-dao.xml中配置mapper的bean,然后再service中添加mapper属性,是可以的,不过这样似乎就不适spring的依赖注入了。。。

求大神解惑。。。。
[/quote]

你可以把导出来的jar包用压缩工具打开看看 ,看看mapper位置在哪里,然后根据压缩包的文件结构,指定mapper扫描的路径。
还有就是 你这个是spring 还是spring boot[/quote]

是spring,不是spring boot.
我的jar包的结构是:manager.jar,解压后:
manager
--mapper
--memberMapper.xml
拉环的浪漫 2018-08-14
  • 打赏
  • 举报
回复
引用 2 楼 qiananlihp 的回复:
[quote=引用 1 楼 qq_35050756 的回复:]
我以前似乎听同事说过这个问题 问题是打包之后的存放的路径和在调试的时候 不一样
那时候好像是在pom.xml里面设置一些参数就可以了


谢谢解答,pom.xml是maven项目的配置文件吗?还没学呢。。。我写的不是maven项目,按照您的思路又查了一些资料,但是按照那些方法似乎还是不行,我查到的方法是:在classpath后面加上*,即:classpath*:XXX/XXX/XX.xml,这样eclipse是出错的,然后导出后还是报错。

我获取applicationContext的方法如下:
String[] args = new String[] {
"spring/applicationContext-dao.xml",
"spring/ApplicationContext-service.xml",
"spring/ApplicationContext-transaction.xml" };
ApplicationContext actx = new ClassPathXmlApplicationContext(args);
这个似乎是没有问题的,找到了这些配置文件,配置sqlSessionFactory如下:
<!-- 加载mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
SqlMapConfig.xml中配置了别名。似乎就有问题了,因为报错:原因是别名不识别,改为全限定名就可以了,然后又出现上面的错误。
用扫描mapper的方法获取mapper:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,每个包中间使用半角逗号分隔 -->
<property name="basePackage" value="mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
******我想问题应该是:没有找到SqlMapConfig.xml和*Mapper.xml文件。

还有一个情况是:我不用上面扫描mapper包的方法配置mapper,即在SqlMapConfig中配置Mappers,然后在applicationContext-dao.xml中配置mapper的bean,然后再service中添加mapper属性,是可以的,不过这样似乎就不适spring的依赖注入了。。。

求大神解惑。。。。
[/quote]

你可以把导出来的jar包用压缩工具打开看看 ,看看mapper位置在哪里,然后根据压缩包的文件结构,指定mapper扫描的路径。
还有就是 你这个是spring 还是spring boot
qiananlihp 2018-08-14
  • 打赏
  • 举报
回复
引用 1 楼 qq_35050756 的回复:
我以前似乎听同事说过这个问题 问题是打包之后的存放的路径和在调试的时候 不一样
那时候好像是在pom.xml里面设置一些参数就可以了


谢谢解答,pom.xml是maven项目的配置文件吗?还没学呢。。。我写的不是maven项目,按照您的思路又查了一些资料,但是按照那些方法似乎还是不行,我查到的方法是:在classpath后面加上*,即:classpath*:XXX/XXX/XX.xml,这样eclipse是出错的,然后导出后还是报错。

我获取applicationContext的方法如下:
String[] args = new String[] {
"spring/applicationContext-dao.xml",
"spring/ApplicationContext-service.xml",
"spring/ApplicationContext-transaction.xml" };
ApplicationContext actx = new ClassPathXmlApplicationContext(args);
这个似乎是没有问题的,找到了这些配置文件,配置sqlSessionFactory如下:
<!-- 加载mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
SqlMapConfig.xml中配置了别名。似乎就有问题了,因为报错:原因是别名不识别,改为全限定名就可以了,然后又出现上面的错误。
用扫描mapper的方法获取mapper:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,每个包中间使用半角逗号分隔 -->
<property name="basePackage" value="mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
******我想问题应该是:没有找到SqlMapConfig.xml和*Mapper.xml文件。

还有一个情况是:我不用上面扫描mapper包的方法配置mapper,即在SqlMapConfig中配置Mappers,然后在applicationContext-dao.xml中配置mapper的bean,然后再service中添加mapper属性,是可以的,不过这样似乎就不适spring的依赖注入了。。。

求大神解惑。。。。
拉环的浪漫 2018-08-10
  • 打赏
  • 举报
回复
我以前似乎听同事说过这个问题 问题是打包之后的存放的路径和在调试的时候 不一样
那时候好像是在pom.xml里面设置一些参数就可以了

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧