目录
1.问题:
有时候打开Module,发现各级文件夹下的类不能正常使用,类前的符号(小咖啡杯)是红色的(红色表示这个类是不可编译文件)。类前红色咖啡杯符号如图1所示:
图1 类前红色咖啡杯符号
打开文件后显示文字“Java file is located outside of the module source root,so it won't be complied”,警告文字如图2所示:
图2 警告文字
2.解决方法:
单击Module所在的“java”文件夹(注意不要点到其它的文件夹了),然后右键,找到“Mark Directory as”,选择“Sources Root”,操作过程如图3所示:
图3 操作过程
然后就会发现类前面本来红色的“小咖啡”变成蓝色的“小C圈”,而且本来灰色的java文件夹也变成蓝色了,这样类就可以正常使用了。颜色变化如图4所示:
图4 颜色变化
3.扩展:父子工程引入Module后报错
对于父子工程,有时候因为各种需要,会选择直接复制他人优秀的Module作为子模块,但是引入之后会格格不入(报错啦,O(∩_∩)O) ,报错很大可能就跟子模块的“名字”有关。
比如引入Module“consumer1”,但父工程的pom.xml文件中并没有包含“consumer1”,那么引入的“consumer1”Module就会是一个灰色的文件夹(正常的Module应该是一个文件夹上有个蓝色小框框),不能正常使用。Module未被父工程pom.xml文件引入如图5所示:
图5 Module未被父工程pom.xml文件引入
解决方法一:
直接将“consumer1”引入父工程的pom.xml文件的<module>,发现“consumer1”文件夹变成蓝色小框框了,然后就可以正常使用“consumer1”模块了,直接引入“consumer1”如图6所示:
图6 直接引入“consumer1”
解决方法二:
如果觉得“consumer1”这个名字不能传达自己的想法,或者不够文艺,总之不管怎样,想改个名字,此处假设将“consumer1”改为“consumer”。
单击“consumer1”文件夹,右键,选择“Refactor”,选择“Rename”,Rename操作如图7所示:
图7 Rename操作
输入自己想改的名字,然后点击“Refactor”,即可完成名字的修改,修改名字如图8所示:
图8 修改名字
但是修改完名字之后,发现“consumer1”文件夹确实改为了“consumer”文件夹,而且文件夹上有小蓝框,可以正常使用这个模块了,但是“consumer”后面跟着文字:“consumer1”,跟着文字:“consumer1”如图9所示:
图9 跟着文字:“consumer1”
不改其实也不影响使用,但假设想改的话,还是跟改名字一个套路:单击“consumer”文件夹,右键,选择“Refactor”,选择“Rename”,Rename操作如图10所示:
图10 Rename操作
但是发现多出来一个选项,就是让选择修改哪一个,上面一个“Rename directory”是修改文件夹名称的(跟第一次操作结果其实是一样的),本次选择下面一个“Rename module”,用于修改module名称,选择“Rename module”如图11所示:
图11 选择“Rename module”
将module由“consumer1”修改为“consumer”,然后单击“OK”,修改module名称如图12所示:
图12 修改module名称
最后,就大功告成了,“consumer1”消失了,“consumer1”消失如图13所示:
图13 “consumer1”消失
参考文献:
(下面两篇博文十分优秀,内容也更加充实,值得一看!)
idea报错-java file outside of source root_outside out source root-CSDN博客