你好,我是 A 哥(YourBatman)。
有一个观点:若一个 Java 开发者能把 IDEA 玩得 666,则技术肯定不会差;但若玩不转 IDEA(如不会设置、定制、解决日常问题、快捷键等等),那大概率程度很个别。因为高手个别得有高手的样子,你批准这个观点吗?
通过上篇文章 你也理解到,现今的 Javaer 绝大部分都应用 IntelliJ IDEA 作为 IDE 进行开发,但同时发现(从身边共事考察)大部分同学都并不能很好的应用 IDEA,其中体现最为突出的是 IDEA 里的 Project 和 Module 两个概念,混淆不清或者概念齐全扭曲。
A 哥是一个绝对来讲很重视基础知识搭建的 Javaer,所以对于最罕用的工具也是如此,违心花些工夫去搞明确,包含页布局、性能定制、插件、以及快捷键都会调为本人最棘手的状态,毕竟 工欲善其事,必先利其器。
本文将着眼于帮你深刻的介绍 IntelliJ IDEA 里最重要的两个概念:Project 和 Module,它是最最最根底也是最重要的,我认为本文不仅适宜应用 IDEA 的萌新,同样适宜应用 IDEA 的“新手”(已经 eclipse 的重度用户尤甚)。
本文提纲
版本约定
- IntelliJ IDEA:2020.3.1
注释
IntelliJ IDEA 相较于 Eclipse 堪称是后起之秀,2006 年开始锋芒毕露,2012 年整体性能上完败 Eclipse,2016 年市场份额实现全面超过,一步步的逐步成为 JVM 平台的支流 IDE。
正是因为有这样的历史进程,有少量“老”程序员是从 Eclipse 适度到 IDEA 来的,因而就有了一个颇具代表性的概念比照表格,不便“迁徙”:
诚然,IntelliJ IDEA 的应用老本比 eclipse 略高,在那样的历史背景下,这张表格的确升高了“老”程序员们的迁徙适度老本,即便当初看来这张表格的形容 并不精确,设置具备极大的误导作用(副作用开始展示 ……)。
IDEA 和 eclipse 的概念类比上,最“驰名”的当属 把 IDEA 的 Project 比作 Eclipse 的 Workspace,回顾下你当初是不是常常听到这样的声音?博客文章这样说、培训机构老师这样说、甚至大学的老师也是教你这么去了解的。更有甚者,对于很多“中毒”很深的、已经的 eclipse 用户来说,他们是这样应用 IDEA 的:
实现了所谓的:IDEA 在同一窗口显示多个我的项目。若你发现你身边有这么样治理我的项目的共事,那么他是你的“前辈”没跑了,因为铁定是 eclipse 的资深用户,而后迁徙到 IDEA 来。
这种做法是谬误的,毫不相干的我的项目(近程调用不叫有关系)没有理由放在同一视窗内,除了烦扰还是烦扰。Eclipse 里有 workspace 工作空间的概念尚可了解,可 IDEA 里是相对不要这么做。
在 IntelliJ IDEA 中,没有相似于 Eclipse 工作空间(Workspace)的概念,而是提出了 Project 和 Module 这两个概念。本文来通知你,IntelliJ IDEA 是如何治理我的项目 Project、模块 Module 以及它俩关系,看完之后你会发现单这一点 IntelliJ IDEA 就比 Eclipse 优良得多。
Project 和 Module 概念
什么是 Project
Eclipse 中一个 Workspace 能够包含多个 Project,而在 IDEA 里 Project 是 顶级概念。
Project(翻译为:我的项目)IntelliJ IDEA 的 顶级 组织单元,它是个 逻辑概念 。一般来说一个 Project 代表一个 残缺的 解决方案,如它可蕴含多个局部,如:
- 源代码
- 构建脚本
- 配置文件
- 文档
- SDK
- 依赖库
- …
也就是说 Project 是个完整体,是个资源的汇合,扔到任何中央都是能够被解释的。
阐明:倡议把 Project 翻译为我的项目,而非工程,不在一个维度。因为一个 module 其实也能够了解为一个工程,防止混同
什么是 Module
模块是是我的项目 Project 的一部分,必须 隶属于 Project 而存在。它能够 独立 编译、测试、运行甚至部署。
模块是分而治之思维的体现,是升高 大型项目复杂度 的一种无效伎俩。模块是可重用的,若须要,一个模块能够被多个模块援用,甚至多个 Project 我的项目援用(比方 commons 模块)。
此处强烈不再倡议你把 Eclipse 的 Workspace 引入进来做类比,那只会把你带跑偏了。细品这两个概念定义,总结一下:
-
在 IDEA 中,Project 我的项目是 最顶级 的结构单元,一个 IDEA 视窗有且只能代表一个 Project
- 当初晓得为何把 user、account、order 扔到一个视窗里有如许的不适合了吧
- 一个 Project 由一个 or 多个 Module 模块组成,对于 大型项目 来讲个别会有 N 多个 module 组成,如 dubbo 我的项目构造如下图所示:
- 一个 module 模块里,仍旧能够有子模块,已经可有限延长(但不倡议太多)
- Project 是个逻辑概念,Module 才是最终的存在模式
谬误应用
长处:
- 一个窗口,能看见全貌
弊病:
- 视窗性能不繁多。account、order、user 属于不同我的项目,是为了解决不同问题而存在,没有理由放在一起
- 烦扰性太强。比方他们三都有类叫
ProcessService
,那么在你查找的时候永远无奈“精确定位”
-
额定性能开销。比方你只想开发 user,但还得把其它的加载进来,齐全没有必要嘛。
- 阐明:idea 不能像 eclipse 一样 close project 的,毕竟人家那是 workspace 的概念,而 idea 同一视窗属于同一我的项目,总不能说敞开某个模块吧,模块个别相关性很强,齐全没必要独自开 / 关
- 想一想,若你一个人负责了 20+ 个我的项目,每次关上是不是得花上个几分钟呢?
- 概念上凌乱。这么放在一起,其实就不是 user 我的项目、order 我的项目了,而是 user 模块、order 模块,很显著概念上就不精确了
正确应用
这种应用形式界面清新,运行晦涩,解决了下面谬误形式的所有弊病。
新建我的项目 Project
万丈高楼平地起,应用 IDEA 的第一步肯定是新建一个我的项目 Project:
或者你也能够在视窗 外部 新建,顶部菜单栏File -> New -> 三选一
:
三种创立形式:
- 创立一个全新我的项目
- 关上现有我的项目
- 从 VCS 版本控制系统里 clone 一个我的项目
本文就以 1 为例,因为 2 和 3 从实质上讲都叫关上我的项目,并不会经验创立流程。上面咱们按步骤走一篇创立流程:
第一步:抉择创立我的项目的形式,本文抉择创立创立 Java 我的项目
第二步:抉择依据模版创立我的项目。这个在 maven 还没呈现之前挺有用,当初简直不必了,因而个别都不勾选
第三步:填写我的项目名、我的项目地位(以及同步创立的模块名、地位等,可选)
- ①:我的项目存储地位,个别作为整个我的项目的根目录
- ②:内容根目录
- ③:模块文件寄存的目录
- ④:我的项目格式文件(IDEA 负责辨认,前面它还会出镜)
More Setttings
选项默认是收起状态,也就是说大多数状况下创立时你并不需要批改同步创立的模块的这些信息,而实际上也的确是这么干的。
点击 Finish,IDEA 100%就会在新窗口(或者笼罩本窗口)关上新创建的这个我的项目:
该我的项目在硬盘里的表现形式仅仅是一个文件目录而已:
.idea 文件夹的作用
每个 Project 我的项目都对应 1 个 .idea 文件夹(暗藏目录),该我的项目所有特定设置都存储在该.idea 文件夹下,比方我的项目模块信息、依赖信息等等。
一般来讲它外面会有这些文件 / 目录:
misc.xml
:形容该我的项目一些混淆信息,如 SDK、语言等级、我的项目输入的目录等等modules.xml
:形容该我的项目有哪些 Module 模块workspace.xml
:形容视窗的信息。如 Project 窗口在右边还是左边,窗体大小,色彩,是否暗藏,滚动状况等等(每个 Project 都容许你个性化配置,规定都被记录在这个文件里)vcs.xml
:应用的 VCS 工具信息,如 Git
除了这些,一些插件也常常会往这个目录减少文件,如:
saveactions_settings.xml
:saveaction 插件的专属配置文件jarRepositories.xml
:近程仓库配置文件encodings.xml
:形容模块文件夹编码信息的配置文件compiler.xml
:形容每个 module 模块应用的编译器信息的文件。如应用 1.8 编译,是否加了编译参数-parameters
等等都在这里体现
总的来讲,这个文件夹外面的货色 不必关怀 ,由 IDEA/ 插件本人主动保护,咱们只须要界面化操作即可。当然喽,若理解一二对于定位一些常见问题(如不知-parameters
是否失效)是有帮忙的。
新建模块 Module
创立好一个 Project 默认会有一个 同名的 的 module(Empty Project 除外),如果我的项目比拟小复杂度较低,一个模块足矣。然而,略微有点复杂性的我的项目个别都心愿进行模块拆分,建设多个模块,分而治之。比方:
- hello-service:实现外围业务性能解决
- hello-persistence:简单长久化工作
- hello-client:作为客户端裸露进来
第一步:顶部菜单栏给该我的项目创立模块
当然还有一种形式是在 Project Structure
里创立(这个咱们下篇文章再聊):
第二步:抉择该模块类型,能够是 Java 我的项目、maven 我的项目、Kotlin 我的项目等等都行
第三步:给模块命名,并制订该 module 模块的存在地位。一般来讲只须要写名称即可,模块的门路默认会放在 project 目录的 子目录 下
对于目录抉择再强调一遍:默认状况下模块门路会在 Project(或者父模块)的 子目录 下,但这并不是必须的,你也能够改为和 Project 的同级目录也是能够的,逻辑上仍旧属于 Project 的模块,不会有问题。但个别倡议放弃这种层级关系而不要批改~
若是父子目录,层级关系更显著些,否则是一种 plat 平铺目录关系,看着会不太“难受”
点击 Finish,在 Project 视窗就能够看见该模块啦(层级构造展现哦):
这个时候的 Project – Module 层级结构图是这样子的:
这时我就抛出一个问题,若要实现下图这种层次结构(plat 全副平级),新建模块时须要留神些什么呢?
模块创立好后,这时再看看 .idea
这个文件夹里的modules.xml
,内容为:
xxx.iml 文件的作用
每个 Module 模块都对应一个 同名的 .iml 文件,用于形容该模块的相干信息。如:SDK、语言等级、依赖、源代码所在位置、输入门路等等。
总结
本文主题是介绍 IDEA 的 Project 和 Module 两个重要概念,而后再通过具体示例的形式加深了解,讲的还是比较清楚的(可能是全网最分明的?),心愿能够帮忙到你加深对 IDEA 的了解,再也不要把 IDEA 的 Project 比作 Eclipse 的 Workspace。
简略总结一下本文内容:
- Project 是一个不具备任何编码设置、构建等 开发性能 的概念,次要作用就是起到一个我的项目定义、范畴束缚的成果(比方 user 我的项目,外面所有内容应该是为了解决 user 问题而存在的),你也能够了解它就是一个目录,而后这个目录的名字就代表我的项目名
- Module 模块是代码的理论表现形式。在默认状况下,一个 Project 对应一个 Module,它俩“合二为一”,对于中大型项目来说,个别都会应用 多模块 编程
下篇预报:在 IDEA 中,对我的项目构造 Project Structure
的设置 尤为重要,下篇就为你分析该页面每个 tab 选项,到底如何玩转它,具备一个高手的样子,这对你了解 Maven 我的项目也将十分十分有帮忙,敬请关注
本文思考题
本文所属专栏:IDEA,后盾回复专栏名即可获取全部内容,已被 https://www.yourbatman.cn 收录。
看完了不肯定懂,看懂了不肯定会。来,文末 3 个思考题帮你复盘:
- IDEA 的 Project 和 eclipse 的 workspace 的本质区别在哪里?
- 如何给 Project/module 独自增加依赖库?
- IDEA 模块的.iml 文件有什么作用?
举荐浏览
- IntelliJ IDEA 20 周岁啦,为期 2 天的周年庆流动对开发者收费凋谢
- IntelliJ IDEA 2020.3 正式公布,年度最初一个版本很讲武德
- IntelliJ IDEA 2020.2 正式公布,诸多亮点总有几款能助你提效
System.out.println("点个赞吧!");
print_r('关注【BAT 的乌托邦】!');
var_dump('私聊 A 哥:fsx1056342982');
console.log("点个赞吧!");
NSLog(@"关注【BAT 的乌托邦】!");
print("私聊 A 哥:fsx1056342982");
echo("点个赞吧!");
cout << "关注【BAT 的乌托邦】!" << endl;
printf("私聊 A 哥:fsx1056342982");
Console.WriteLine("点个赞吧!");
fmt.Println("关注【BAT 的乌托邦】!");
Response.Write("私聊 A 哥:fsx1056342982");
alert("点个赞吧!");
作者简介:A 哥 (YourBatman),Spring Framework/Boot 开源贡献者,Java 架构师,领域专家,DDD 驱动设计。 十分重视基本功涵养 ,底层根底决定上层建筑,能力焕发程序员更强生命力。善于结构化拆解专题,抽丝剥茧颇具深度。这些专题兴许可能大略是 全网最好或独一份 哦,欢送自取。