前言大家好,我是A哥(YourBatman)。有一种观点:Java开发者如果能玩IDEA666,技术肯定不会差;但如果他不会玩IDEA(比如不会设置、自定义、解决日常问题、快捷键等),那么大概率水平一般。你是否同意这个观点,因为高手一般都要长得像高手?通过上一篇文章,你也了解到现在的Javaer大多使用IntelliJIDEA作为IDE进行开发,但同时发现(从身边同事的调查中)大部分同学都不能很好的使用IDEA,而最突出的是IDEA中的Project和Module这两个概念,混淆或者完全扭曲。A哥是一个Javaer,比较注重基础知识的搭建,所以最常用的工具也是如此。他愿意花点时间去了解,包括页面布局、功能定制、插件、快捷键等。毕竟,工欲善其事,必先利其器。本文将重点帮助大家介绍IntelliJIDEA中最重要的两个概念:Project和Module,这是最基础也是最重要的。我觉得这篇文章不仅适合使用IDEA,也适合使用IDEA。“老手”(尤其是曾经是eclipse的重度用户)。本文大纲版本同意IntelliJIDEA:2020.3.1文IntelliJIDEA相对于Eclipse是一颗冉冉升起的新星。2006年开始崭露头角,2012年在综合性能上全面击败Eclipse。2016年,其市场份额被完全超越,逐步成为JVM平台的老大。主流IDE。也正是因为这个历史过程,大量“老”程序员从Eclipse过渡到IDEA,所以有一个有代表性的概念对照表,方便“迁移”:确实,使用IntelliJIDEA的成本略高于eclipse,在这样的历史背景下,这张表确实降低了“老”程序员的过度迁移成本,尽管看起来这张表的描述并不准确,设置也极具误导性(Thesideeffectsstarted...).在IDEA和eclipse的概念类比上,最“出名”的就是将IDEA的Project比作Eclipse的Workspace。还记得你经常听到这样的声音吗?博文是这样说的,培训机构老师是这样说的,甚至大学老师也是这样教你理解的。更有什者,对于很多深受“毒害”的前eclipse用户来说,他们是这样使用IDEA的:他们实现了所谓:IDEA在同一个窗口中显示多个项目。如果你发现你身边有这样管理项目的同事,那他就是你没跑路的“前任”,因为他肯定是eclipse的资深用户,然后迁移到IDEA。这种做法是错误的,没有理由将不相关的项目(远程调用不相关)放在同一个窗口中,除了干扰或干扰。Eclipse中workspace的概念是可以理解的,但是在IDEA中是绝对不行的。在IntelliJIDEA中,并没有类似Eclipse工作空间(Workspace)的概念,而是提出了Project和Module这两个概念。本文将告诉您IntelliJIDEA是如何管理Project、Module以及它们之间的关系的。看完之后你会发现IntelliJIDEA比Eclipse好太多了。Project和Module是什么概念?Eclipse中一个Workspace可以包含多个Project,而Project是IDEA中的顶层概念。Project(译为:项目)IntelliJIDEA的顶级组织单元,是一个逻辑概念。一般来说,一个项目代表一个完整的解决方案。比如它可以包含多个部分,比如:源码、构建脚本、配置文件、文档、SDK、依赖库……也就是说,一个Project是一个完整的主体,一个资源的集合,扔到Anywhere可以解释。?说明:建议将Project翻译成工程,不是工程,不是一维的。因为一个模块其实可以理解为一个工程,为了避免混淆?什么是模块?模块是项目的一部分,必须存在于项目下。它可以独立编译、测试、运行甚至部署。模块是分治思想的体现,是降低大型项目复杂度的有效手段。模块是可重用的。如果需要,一个模块可以被多个模块引用,甚至可以被多个Project项目引用(比如commons模块)。强烈建议大家不要再拿Eclipse的Workspace做类比介绍,那样只会误入歧途。仔细看一下这两个概念的定义,总结一下:1.在IDEA中,Project项目是最顶层的结构单元。一个IDEA窗口有且只能代表一个Project。现在我知道为什么用户、帐户和订单被扔到一个窗口中了。有多不合适?2.一个Project由一个或多个Module模块组成。对于大型项目,通常有N个以上的模块。例如dubbo项目结构如下图所示:3.在一个模块模块中,仍然可以有子模块,可以无限扩展(但不推荐太多)。4.Project是一个逻辑概念,Module是最终的存在形式。误用优点:1.一个窗口,可以看到全貌缺点:2.窗口功能不好单一。账号、订单、用户属于不同的项目,是为了解决不同的问题而存在的。没有理由把它们放在一起。3、干扰太大。比如他们三个都有一个类叫ProcessService,那么你搜索的时候永远无法“准确定位”。3.额外的性能开销。比如你只想开发用户,却要把其他的东西加载进去,那是完全没有必要的。说明:idea不能像eclipse一样关闭项目。毕竟是workspace的概念,同一个idea窗口属于同一个项目。不能说关闭某个模块。模块一般关联性很强,没必要单独打开/关闭想一想,如果你一个人负责20+个项目,每次打开会不会需要几分钟?4.概念混乱。这样拼起来,其实不是用户工程和订单工程,而是用户模块和订单模块。显然,这个概念是不准确的。正确使用该方法界面干净,运行流畅,解决了以上所有的错误方法。缺点。使用IDEA第一步是新建工程Project:或者也可以在window里面新建工程,顶部菜单栏File->New->三选一:三种创建方式:创建一个新工程opensanexistingprojectCloneaprojectfromtheVCSversioncontrolsystem本文以1为例,因为2和3本质上都是叫打开项目,不走创建过程。让我们一步步过一遍创建过程:第一步:选择创建项目的方式。本文选择创建Java项目。第二步:选择基于模板创建项目。这个在maven出现之前很有用,现在几乎不用了,所以一般不勾选。第三步:填写项目名称、项目位置(以及同步创建的模块名称、位置等,可选)①:项目存放位置,一般为整个项目的根目录②:内容根目录③:模块所在目录filesstored④:工程格式文件(IDEA负责识别,后面会出现)MoreSettings选项默认是关闭的,也就是说大部分同步创建的信息你不需要修改创建案例时的模块,事实上它确实如此。点击Finish,IDEA**100%**会在新窗口中打开新建的工程(或者覆盖这个窗口):工程在硬盘中的表示只是一个文件目录:.idea文件夹的作用就是每一个Project都对应一个.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:描述各个模块模块使用的编译信息的文件。比如你用1.8编译,有没有加编译参数-parameters等,这里都有体现。一般来说,你不需要关心这个文件夹里的东西。IDEA/plugins会自动维护它们。我们只需要通过界面进行操作即可。当然,了解一两个有助于定位一些常见问题(比如不知道-parameters是否有效)。新建一个模块Module创建一个Project后,默认会有一个同名的模块(EmptyProject除外)。如果项目比较小,复杂度不高,一个模块就够了。但是稍微复杂一点的项目一般都想拆分模块,创建多个模块,分而治之。例如:hello-service:实现核心业务功能处理hello-persistence:复杂的持久化工作hello-client:暴露为客户端第一步:在顶部菜单栏中为项目创建一个模块当然,还有一种方法可以做在ProjectStructure中创建(下一篇再讲):第二步:选择模块类型,可以是Java项目、maven项目、Kotlin项目等第三步:命名模块并指定位置模块模块。一般来说,只需要写名字,模块的路径默认会放在项目目录的子目录下。关于目录的选择我再强调一下:默认情况下,模块路径会在Project(或父模块)的子目录下,但这不是必须的,你也可以改成和Project同目录,并且按道理还是属于Project的模块,不会有问题。但一般建议保持这种层级关系,不要修改~?如果是父子目录,层级关系更明显,否则就是平铺的目录关系,看起来不会“舒服”在?点击Finish,就可以在Project窗口中看到这个模块(层级结构展示):这时,Project-Module层级结构图是这样的:这时,我会抛出一个问题。如果要实现下图的层级结构(所有plats都在同一层级),新建模块需要注意什么?模块创建完成后,查看.idea文件夹下的modules.xml。内容是:xxx.iml文件的作用。每个Module模块对应一个同名的.iml。文件,用于描述模块的相关信息。如:SDK、语言级别、依赖、源码位置、输出路径等。综上所述,本文的主题是介绍IDEA的Project和Module的两个重要概念,然后通过具体的例子来加深理解.不要再拿IDEA的Project和Eclipse的Workspace来比较了。简单总结一下本文的内容:Project是一个概念,不具备编码设置、构建等任何开发功能。存在),也可以理解为一个目录,然后这个目录的名字就代表了项目名Module模块就是代码的实际形式。默认情况下,一个Project对应一个Module,它们是“合二为一”的。对于中大型项目,一般采用多模块编程。下一篇预览:在IDEA中,设置项目结构ProjectStructure尤为重要,下篇文章会为大家分析一下这个页面的各个tab选项,怎么玩,怎么看都是高手,也会很,对你理解Maven项目很有帮助。请关注本文中的思考题。看完题你不一定看懂,我不一定看懂。加油,文末的3个问题帮你回顾:IDEA的Project和eclipse的workspace有什么本质区别?如何给Project/module添加单独的依赖库?IDEA模块的.iml文件有什么作用?
