谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

前言

你好,我是A哥(YourBatman)。java

有一个观点:若一个Java开发者能把IDEA玩得666,则技术必定不会差;但若玩不转IDEA(如不会设置、定制、解决平常问题、快捷键等等),那大几率水平很通常。由于高手通常得有高手的样子,你赞成这个观点吗?程序员

经过上篇文章 你也了解到,现今的Javaer绝大部分都使用IntelliJ IDEA做为IDE进行开发,但同时发现(从身边同事调查)大部分同窗都并不能很好的使用IDEA,其中表现最为突出的是IDEA里的Project和Module两个概念,混淆不清或者概念彻底扭曲。编程

A哥是一个相对来说很注重基础知识搭建的Javaer,因此对于最经常使用的工具也是如此,愿意花些时间去搞明白,包括页布局、功能定制、插件、以及快捷键都会调为本身最顺手的状态,毕竟工欲善其事,必先利其器架构

本文将着眼于帮你深刻的介绍IntelliJ IDEA里最重要的两个概念:Project和Module,它是最最最基础也是最重要的,我认为本文不只适合使用IDEA的萌新,一样适合使用IDEA的“老手”(曾经eclipse的重度用户尤甚)。eclipse

本文提纲

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

版本约定

  • IntelliJ IDEA:2020.3.1

正文

IntelliJ IDEA相较于Eclipse可谓是后起之秀,2006年开始崭露头角,2012年总体性能上完败Eclipse,2016年市场份额完成全面超越,一步步的逐渐成为JVM平台的主流IDE。maven

正是因为有这样的历史进程,有大批“老”程序员是从Eclipse过分到IDEA来的,所以就有了一个颇具表明性的概念对比表格,方便“迁移”:ide

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

诚然,IntelliJ IDEA的使用成本比eclipse略高,在那样的历史背景下,这张表格确实下降了“老”程序员们的迁移过分成本,即便如今看来这张表格的描述并不许确,设置具备极大的误导做用(反作用开始展示......)。工具

IDEA和eclipse的概念类比上,最“著名”的当属把IDEA的Project比做Eclipse的Workspace,回忆下你当初是否是常常听到这样的声音?博客文章这样说、培训机构老师这样说、甚至大学的老师也是教你这么去理解的。更有甚者,对于不少“中毒”很深的、曾经的eclipse用户来讲,他们是这样使用IDEA的:布局

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

实现了所谓的:IDEA在同一窗口显示多个项目。若你发现你身边有这么样管理项目的同事,那么他是你的“前辈”没跑了,由于铁定是eclipse的资深用户,而后迁移到IDEA来。性能

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

这种作法是错误的,绝不相干的项目(远程调用不叫有关系)没有理由放在同一视窗内,除了干扰仍是干扰。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表明一个完整的解决方案,如它可包含多个部分,如:

  1. 源代码
  2. 构建脚本
  3. 配置文件
  4. 文档
  5. SDK
  6. 依赖库
  7. ...

也就是说Project是个完总体,是个资源的集合,扔到任何地方都是能够被解释的。

说明:建议把Project翻译为项目,而非工程,不在一个维度。由于一个module其实也能够理解为一个工程,避免混淆

什么是Module

模块是是项目Project的一部分,必须隶属于Project而存在。它能够独立编译、测试、运行甚至部署。

模块是分而治之思想的体现,是下降大型项目复杂度的一种有效手段。模块是可重用的,若须要,一个模块能够被多个模块引用,甚至多个Project项目引用(好比commons模块)。


此处强烈再也不建议你把Eclipse的Workspace引入进来作类比,那只会把你带跑偏了。细品这两个概念定义,总结一下:

  1. 在IDEA中,Project项目是最顶级的结构单元,一个IDEA视窗有且只能表明一个Project
    1. 如今知道为什么把user、account、order扔到一个视窗里有多么的不合适了吧
  2. 一个Project由一个or多个Module模块组成,对于大型项目来说通常会有N多个module组成,如dubbo项目结构以下图所示:

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

  1. 一个module模块里,依旧能够有子模块,曾经可无限延伸(但不建议太多)
  2. Project是个逻辑概念,Module才是最终的存在形式

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

错误使用

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

优势:

  1. 一个窗口,能看见全貌

弊端:

  1. 视窗功能不单一。account、order、user属于不一样项目,是为了解决不一样问题而存在,没有理由放在一块儿
  2. 干扰性太强。好比他们三都有类叫ProcessService,那么在你查找的时候永远没法“精肯定位”

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

  1. 额外性能开销。好比你只想开发user,但还得把其它的加载进来,彻底没有必要嘛。
    1. 说明:idea不能像eclipse同样close project的,毕竟人家那是workspace的概念,而idea同一视窗属于同一项目,总不能说关闭某个模块吧,模块通常相关性很强,彻底不必单独开/关
    2. 想想,若你一我的负责了20+个项目,每次打开是否是得花上个几分钟呢?
  2. 概念上混乱。这么放在一块儿,其实就不是user项目、order项目了,而是user模块、order模块,很明显概念上就不许确了

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

正确使用

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

这种使用方式界面清爽,运行流畅,解决了上面错误方式的全部弊端。

新建项目Project

万丈高楼平地起,使用IDEA的第一步必定是新建一个项目Project:

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

或者你也能够在视窗内部新建,顶部菜单栏File -> New -> 三选一

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

三种建立方式:

  1. 建立一个全新项目
  2. 打开现有项目
  3. 从VCS版本控制系统里clone一个项目

本文就以1为例,由于2和3从本质上讲都叫打开项目,并不会经历建立流程。下面咱们按步骤走一篇建立流程:

第一步:选择建立项目的方式,本文选择建立建立Java项目

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

第二步:选择根据模版建立项目。这个在maven还没出现以前挺有用,如今几乎不用了,所以通常都不勾选

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

第三步:填写项目名、项目位置(以及同步建立的模块名、位置等,可选)

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

  • :项目存储位置,通常做为整个项目的根目录
  • :内容根目录
  • :模块文件存放的目录
  • :项目格式文件(IDEA负责识别,后面它还会出镜)

More Setttings选项默认是收起状态,也就是说大多数状况下建立时你并不须要修改同步建立的模块的这些信息,而实际上也确实是这么干的。

点击Finish,IDEA 100%就会在新窗口(或者覆盖本窗口)打开新建立的这个项目:

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

该项目在硬盘里的表现形式仅仅是一个文件目录而已:

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

.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:做为客户端暴露出去

第一步:顶部菜单栏给该项目建立模块

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

固然还有一种方式是在Project Structure里建立(这个我们下篇文章再聊):

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

第二步:选择该模块类型,能够是Java项目、maven项目、Kotlin项目等等都行

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

第三步:给模块命名,并制定该module模块的存在位置。通常来说只须要写名称便可,模块的路径默认会放在project目录的子目录

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

关于目录选择再强调一遍:默认状况下模块路径会在Project(或者父模块)的子目录下,但这并非必须的,你也能够改成和Project的同级目录也是能够的,逻辑上依旧属于Project的模块,不会有问题。但通常建议保持这种层级关系而不要修改~

如果父子目录,层级关系更明显些,不然是一种plat平铺目录关系,看着会不太“舒服”

点击Finish,在Project视窗就能够看见该模块啦(层级结构展现哦):

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

这个时候的Project - Module层级结构图是这样子的:

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

这时我就抛出一个问题,若要实现下图这种层次结构(plat所有平级),新建模块时须要注意些什么呢?

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急


模块建立好后,这时再看看.idea这个文件夹里的modules.xml,内容为:

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

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的Project比做Eclipse的Workspace,我就跟谁急

本文思考题

本文所属专栏:IDEA,后台回复专栏名便可获取所有内容,已被https://www.yourbatman.cn收录。

看完了不必定懂,看懂了不必定会。来,文末3个思考题帮你复盘:

  1. IDEA的Project和eclipse的workspace的本质区别在哪里?
  2. 如何给Project/module单独添加依赖库?
  3. IDEA模块的.iml文件有什么做用?

推荐阅读

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

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驱动设计。很是注重基本功修养,底层基础决定上层建筑,才能焕发程序员更强生命力。擅长结构化拆解专题,抽丝剥茧颇具深度。这些专题也许可能大概是全网最好或独一份哦,欢迎自取。

谁再把IDEA的Project比做Eclipse的Workspace,我就跟谁急

相关文章
相关标签/搜索