AutoMapper导入问题
AutoMapper导入问题
- 前言
- 问题阐述
- 探索之路
- 问题暂时解决
- 根本问题
- 问题解决
- 总结
前言
最近在看一个小项目,出现了一个很奇怪的小问题,但是就是这个小问题,导致push到服务器后,出现了重大错误,这个小问题导致程序无法扫描到相应的entity,导致初始化失败,最后整个程序都无法运行。最终搞了几天,终于在今天发现了问题所在,因此本文纪录一下心酸且头秃的过程。
问题阐述
项目结构如下
java
-------com
-------------aaaa.bbbb
----------------------------entity
@Configuration
public class AutoMapperConfig {@Beanpublic AutoMapper autoMapper() {return new AutoMapper(new String[] { "com.aaaa.bbbb.entity" }); //配置实体类所在目录(可多个,暂时不支持通过符*号配置)}
}
在接收项目的时候,为了方便,因此直接在桌面直接使用Git GUI Here,使用git clone的命令将这个项目clone下来。但是运行的时候爆了一大串错误。


巴拉巴拉一大串,意思就是说没找到entity这个文件,导致无法加载该文件里面的Java文件,因此mapping失败。所以关键问题在于Java没有找到entity文件。
探索之路
因为Java后台说他没有找到该目录,而com.aaaa.bbbb.entity是相对路径的写法,所以我就在想是不是idea的配置问题,所以在目录的代码文件和测试文件分别标记

然后再在file structure的modules标记sources和tests。一顿操作猛如虎,一按run,不好意思还是一样的错。
然后我又找到,可能是缓存的原因,听说只要按下一个神奇的按钮,神龙就会满足你的愿望。

然后idea关闭,然后重新加载一堆东西…然后,还是报错。。。
俗话说的好,事不过三,然后我又发现了第三种方法,可能还是配置的问题。

在working directory填写上自己的文件目录。

然鹅,还是报错。。。。
问题暂时解决
在不断的测试中发现
java.com.aaaa.bbbb.entity
aaaa.bbbb.entity
bbbb.entity
entity
都可以成功初始化,就是com.aaaa.bbbb.entity不可以!!!离谱!可恶啊!
虽然可以push上去的时候改回com.aaaa.bbbb.entity,但是这样子太耻辱了。
根本问题
俗话说的好,欲练神功必先,emmm,练好内功。
为了找出原因,我选择用debug一步步探究。
@Configuration
public class AutoMapperConfig {@Beanpublic AutoMapper autoMapper() {return new AutoMapper(new String[] { "com.aaaa.bbbb.entity" }); //配置实体类所在目录(可多个,暂时不支持通过符*号配置)}
}
代码调用的是 AutoMapper函数
该函数出现于com.github.dreamyoung.mprelation
private String[] entityPackages;public AutoMapper() {this.entityPackages = new String[] {};}public AutoMapper(String[] entityPackages) {this.entityPackages = entityPackages;if (entityPackages != null && entityPackages.length > 0) {ClassLoader loader = Thread.currentThread().getContextClassLoader();for (int i = 0; i < entityPackages.length; i++) {String entityPackage = entityPackages[i];String packagePath = entityPackage.replace(".", "/");URL url = loader.getResource(packagePath);if (url != null) {String protocol = url.getProtocol();if (protocol.equals("file")) {File file = new File(url.getPath());File[] files = file.listFiles();for (File childFile : files) {String fileName = childFile.getName();if (fileName.endsWith(".class") && !fileName.contains("$")) {String className = entityPackage + "." + fileName.substring(0, fileName.length() - 6);autoMapperBean(className);}}
继续debug

发现在报错的情况下,虽然后端可以获取到com.aaaa.bbbb.entity并成功转化为com/aaaa/bbbb/entity但是无法获取到对应目录下的文件。简单来说,就像哈尔的移动城堡,虽然你打开了哈尔的门,但是里面是空的。就是说比如你想买奶茶,然后通过地图成功找到了奶茶店,但是奶茶店的工作人员都跑路了,啥都没,所以你肯定啥也拿不到。
问题解决

然后再仔细观察url,发现url获得的一部分是一串乱码?
就是说,你可能真的到了人民路,但是人民路有可能是广州的、上海的、苏州的…找错地方了,那肯定拿不到。
为什么会出现这种情况呢?
可能是由于我的用户名是中文的(码农大忌)…而代码对中文还是不怎么友好,导致传着传着就变味了,解决方法很简单,把项目放在D盘就行了。
总结
代码这东西真的是,失之毫厘,谬以千里。还得严格规范才行啊。解决了这个问题,我摸了摸有些凉凉的脑壳,长叹了一口气。/(ㄒoㄒ)/~~
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
