IDEA在使用maven构建项目时,如果你在当前工程下创建一个子工程,那么原有的工程(变为父工程的工程)原有的代码通常会变得不可运行。
这是因为,使用maven创建父子工程关系后,IDEA会自动变更项目的模块相关配置。
比如这是我maven工程原本的项目结构和其设置:
可以看到,当前我的项目还是可以运行的,Main.java被标记为蓝色的class文件。
我们在mavenText2项目下面创建一个子工程,然后我们原有的代码就不可以运行了,且它的标记变成了咖啡图标:
这个其实就是简单的IDEA使用方面的知识了。
先回到项目一块来讲,比如一个JavaWeb项目,这是它的包结构:
Maven中父子工程之间,可以简单地看成是项目与分包的关系。以刚刚的maven项目例子为例,父工程就是我们展示的这个JavaWeb项目的根目录,而下面的一个个子工程就是"src"和"web"次一级分包,这里用另一个更恰当的词:模块。
比如这个JavaWeb的前端模块就是web,后端模块是src (当然,往后肯定会遇到更加复杂的分包和模块设置。
IDEA在你创建子工程之后,父工程就默认为类似根目录的存在。项目的根目录会直接放运行代码么?不会,所以原本父工程的src的包就被当成无意义了,然后IDEA会自动更改你的模块设置。
比如,这是创建子工程前的项目结构:
这是创建了子工程之后的项目结构:
可以看到我们的源文件夹和编译输出包都被删了 (模块的设置,文件没有被删)。
在此之前,小伙伴们在Java项目下面创建普通的Java项目还未出现过该情况,maven是则不是,会自动修改相关设置。
修改模块设置属于IDEA使用范畴的相关知识,而之所以改动模块设置,是因为maven构建项目的定义有关,一个父工程中是一个个子工程,而整个项目的运行代码,会在一个子工程当中,而不是父工程。