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的配置问题,所以在目录的代码文件和测试文件分别标记
![在这里插入图片描述](https://img-blog.csdnimg.cn/b9ddd19741e14967b9b7090bec4eda96.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6YaJ5ZCO5LiN55-l5aSp5Zyo5rC0LOa7oeiIuea4heaipuWOi-aYn-aysw==,size_9,color_FFFFFF,t_70,g_se,x_16
然后再在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ㄒ)/~~


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部