- IDEA 如何获取项目的模块数据
- 从项目源中选择模块加入当前项目中
- 如何移除项目中的模块
- 方式一,选择模块的根目录(Content Root),鼠标右键 Remove
- 方式二,打开【项目结构】窗口,在模块列表中选中模块,点击上方的减号(“-”)来移除项目
- 从项目源选择没有源码文件的模块加入到项目中(有问题)
- 如何导入没有源代码根目录的模块(非Java模块)
- 关于模块的配置文件
这里要特别理解一个问题,硬盘上的项目文件必须在 IDEA 的配置文件中,IDEA 才能识别这个文件,而通过 IDEA 添加本地文件(例如添加项目或者添加模块),其实就是把文件的相关路径和属性信息写入到 IDEA 的配置文件中,IDEA 在开启时会去读取相关的配置文件,从而在相关的功能界面上显示该文件的有关信息。
把模块从当前项目中移除(remove),就是把这个模块的配置信息删除了,当然模块的相关文件依旧在硬盘上。所以从硬盘选取模块目录添加到当前项目中,就必须走完整个流程,这样模块的相关信息才会重新写入配置文件中,那么已经写入配置文件的模块,你如果再从硬盘选择添加,IDEA 会提示有关的 .iml
配置文件已经存在了,你是否需要覆盖,你可以选择覆盖或者选择重复使用已存在的配置文件都可以。
实际上项目的模块信息是写入到文件 projectname/.idea/modules.xml
中,如下所示:
打开项目时,IDEA 会去读取上面的配置文件,然后在模块列表窗格中显示模块列表,如下图所示:
不论是完全地新建模块还是选择硬盘上已有的模块目录添加,对于 IDEA 而言,都是新建模块,选择模块只是硬盘的文件无需创建而已,但是模块的相关数据同样要重新写入 IDEA 相关的配置文件中。而完全新建模块,只是 IDEA 会先根据用户自定义的内容去调操作系统的相关接口创建文件(目录或者文件),然后再把相关的模块数据写入到配置文件中。
其实任何第三方的文件管理工具的实现原理都是这样的,第三方软件无法将特有的属性添加到操作系统的文件系统中,所以只能把操作系统的文件名称、路径等信息记载下来,然后赋予第三方软件自己特有的属性内容 ,从而在第三方的软件中实现对硬盘上的文件的间接管理。
上面的操作其实就是让你选择包的根目录,或者叫源代码的根目录(Source Root),通常是
src
,在目录 src
下创建包,在包下创建源文件,指定了包的根目录,IDEA 就知道源文件在哪里,于是 IDEA 就把所有的源文件路径作为编译器的参数,编译根据路径找到源文件然后进行编译,而编译好的 class
文件则放在 IDEA 指定的项目根目录下的 out/production/
目录下面。
说白了,其实 IDEA 就是自动执行下面的编译命令语句:
cd 项目根目录
javac @sourcefiles -d ./out/production/模块名称/
文件 sourcefiles
包含所有的源文件路径,目录 out
则是存放 class
文件的目标目录。
移除模块,只是将模块从项目中移除,即把文件 modules.xml
中对应的标签删除掉,这样使用 IDEA 打开项目就看不到被移除的模块了,但是模块的文件依旧保存在硬盘中。
如果你选择的模块没有源码文件,那么作为模块添加到项目中也不能正常使用,因为在添加模块的过程中需要选择源码文件的根目录,而你的模块下没有源码文件,所以在这个步骤中就出现问题了: 那么你继续添加后,在模块管理界面中,根本无法配置源码文件的根目录,什么意思?看下图:
也无法创建包(Package),我选中 src 目录,点击鼠标右键根本看不到 Package: 目录的颜色也是不同的:
你可以在【项目管理】窗口选中目录,点击鼠标右键,然后选择【Mark Directory as】–>【Sources Root】:
标记为【Sources Root】之后,目录的颜色就变成“蓝色”的,此时选中它,然后点击鼠标右键,在【new】菜单下的子项中就可以看到 【Package】了:
接着你选择包,然后创建类文件,创建完成后再去模块管理界面看下,你会发现还是无法选择模块的 Sources Root :
我高度怀疑,这是 IDEA 的 bug。
创建一个相同名称的模块,在创建过程中会提示是否覆盖已存在的 .iml
文件,选择覆盖即可。
你把某个目录当成项目的模块添加到项目中,那么这个模块根目录下面就会自动生成一个 .iml
文件,这个配置文件记载了模块的源码文件的根目录等信息。