- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章谁再把IDEA的Project比作Eclipse的Workspace,我就跟谁急由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
你好,我是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相较于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代表一个完整的解决方案,如它可包含多个部分,如:
也就是说Project是个完整体,是个资源的集合,扔到任何地方都是可以被解释的.
❝说明:建议把Project翻译为项目,而非工程,不在一个维度。因为一个module其实也可以理解为一个工程,避免混淆❞ 。
什么是Module 。
模块是是项目Project的一部分,必须隶属于Project而存在。它可以独立编译、测试、运行甚至部署.
模块是分而治之思想的体现,是降低大型项目复杂度的一种有效手段。模块是可重用的,若需要,一个模块可以被多个模块引用,甚至多个Project项目引用(比如commons模块).
此处强烈不再建议你把Eclipse的Workspace引入进来做类比,那只会把你带跑偏了。细品这两个概念定义,总结一下:
1.在IDEA中,Project项目是最顶级的结构单元,一个IDEA视窗有且只能代表一个Project 。
现在知道为何把user、account、order扔到一个视窗里有多么的不合适了吧 。
2.一个Project由一个or多个Module模块组成,对于大型项目来讲一般会有N多个module组成,如dubbo项目结构如下图所示:
3.一个module模块里,依旧可以有子模块,曾经可无限延伸(但不建议太多) 。
4.Project是个逻辑概念,Module才是最终的存在形式 。
错误使用 。
优点:
1.一个窗口,能看见全貌 。
弊端:
2. 视窗功能不单一。account、order、user属于不同项目,是为了解决不同问题而存在,没有理由放在一起 3. 干扰性太强。比如他们三都有类叫ProcessService,那么在你查找的时候永远无法“精确定位” 。
3.额外性能开销。比如你只想开发user,但还得把其它的加载进来,完全没有必要嘛.
说明:idea不能像eclipse一样close project的,毕竟人家那是workspace的概念,而idea同一视窗属于同一项目,总不能说关闭某个模块吧,模块一般相关性很强,完全没必要单独开/关 。
想一想,若你一个人负责了20+个项目,每次打开是不是得花上个几分钟呢?
4.概念上混乱。这么放在一起,其实就不是user项目、order项目了,而是user模块、order模块,很明显概念上就不准确了 。
正确使用 。
这种使用方式界面清爽,运行流畅,解决了上面错误方式的所有弊端.
新建项目Project 。
万丈高楼平地起,使用IDEA的第一步一定是新建一个项目Project:
或者你也可以在视窗内部新建,顶部菜单栏File -> New -> 三选一:
三种创建方式:
本文就以1为例,因为2和3从本质上讲都叫打开项目,并不会经历创建流程。下面我们按步骤走一篇创建流程:
第一步:选择创建项目的方式,本文选择创建创建Java项目 。
第二步:选择根据模版创建项目。这个在maven还没出现之前挺有用,现在几乎不用了,因此一般都不勾选 。
第三步:填写项目名、项目位置(以及同步创建的模块名、位置等,可选) 。
①:项目存储位置,一般作为整个项目的根目录 。
②:内容根目录 。
③:模块文件存放的目录 。
④:项目格式文件(IDEA负责识别,后面它还会出镜) 。
More Setttings选项默认是收起状态,也就是说大多数情况下创建时你并不需要修改同步创建的模块的这些信息,而实际上也确实是这么干的.
点击Finish,IDEA **100%**就会在新窗口(或者覆盖本窗口)打开新创建的这个项目:
该项目在硬盘里的表现形式仅仅是一个文件目录而已:
.idea文件夹的作用 。
每个Project项目都对应1个 .idea文件夹(隐藏目录),该项目所有特定设置都存储在该.idea文件夹下,比如项目模块信息、依赖信息等等.
一般来讲它里面会有这些文件/目录:
除了这些,一些插件也经常会往这个目录增加文件,如:
总的来讲,这个文件夹里面的东西不用关心,由IDEA/插件自己自动维护,我们只需要界面化操作即可。当然喽,若了解一二对于定位一些常见问题(如不知-parameters是否生效)是有帮助的.
新建模块Module 。
创建好一个Project默认会有一个同名的的module(Empty Project除外),如果项目比较小复杂度较低,一个模块足矣。但是,稍微有点复杂性的项目一般都希望进行模块拆分,建立多个模块,分而治之。比如:
第一步:顶部菜单栏给该项目创建模块 。
当然还有一种方式是在Project Structure里创建(这个咱们下篇文章再聊):
第二步:选择该模块类型,可以是Java项目、maven项目、Kotlin项目等等都行 。
第三步:给模块命名,并制定该module模块的存在位置。一般来讲只需要写名称即可,模块的路径默认会放在project目录的子目录下 。
关于目录选择再强调一遍:默认情况下模块路径会在Project(或者父模块)的子目录下,但这并不是必须的,你也可以改为和Project的同级目录也是可以的,逻辑上依旧属于Project的模块,不会有问题。但一般建议保持这种层级关系而不要修改~ 。
点击Finish,在Project视窗就可以看见该模块啦(层级结构展示哦):
这个时候的Project - Module层级结构图是这样子的:
这时我就抛出一个问题,若要实现下图这种层次结构(plat全部平级),新建模块时需要注意些什么呢?
模块创建好后,这时再看看.idea这个文件夹里的modules.xml,内容为:
xxx.iml文件的作用 。
每个Module模块都对应一个同名的 .iml文件,用于描述该模块的相关信息。如:SDK、语言等级、依赖、源代码所在位置、输出路径等等.
总结 。
本文主题是介绍IDEA的Project和Module两个重要概念,然后再通过具体示例的方式加深理解,讲的还是比较清楚的(可能是全网最清楚的?),希望可以帮助到你加深对IDEA的理解,再也不要把IDEA的Project比作Eclipse的Workspace.
简单总结一下本文内容:
下篇预告:在IDEA中,对项目结构Project Structure的设置尤为重要,下篇就为你剖析该页面每个tab选项,到底如何玩转它,具备一个高手的样子,这对你理解Maven项目也将非常非常有帮助,敬请关注 。
本文思考题 。
看完了不一定懂,看懂了不一定会。来,文末3个思考题帮你复盘:
原文地址:https://mp.weixin.qq.com/s/1eZ0cI5dA4QVNniAHN424w 。
最后此篇关于谁再把IDEA的Project比作Eclipse的Workspace,我就跟谁急的文章就讲到这里了,如果你想了解更多关于谁再把IDEA的Project比作Eclipse的Workspace,我就跟谁急的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
为什么 Eclipse 在构建 Android 项目时会陷入无限循环,用于构建工作区...和(重新)构建工作区...和(重新)构建工作区... 这是一个已知的错误吗? 摆脱这个循环的正确方法是什么?
当我排队构建时,我遇到了这个问题。构建因错误而死亡 The path C:\[Path]\Sources is already mapped in workspace [Server Name]. s
本文整理了Java中org.brixcms.workspace.Workspace.getId()方法的一些代码示例,展示了Workspace.getId()的具体用法。这些代码示例主要来源于Gith
本文整理了Java中org.brixcms.workspace.Workspace.setAttribute()方法的一些代码示例,展示了Workspace.setAttribute()的具体用法。这
本文整理了Java中org.brixcms.workspace.Workspace.getAttribute()方法的一些代码示例,展示了Workspace.getAttribute()的具体用法。这
我有一个工作区 A,其中在计算机 A 上 checkout 了文件。现在我想继续在计算机 B 上进行开发。我从计算机 A 复制文件,并创建一个新的工作区 B 并映射到复制的文件。 现在 Visual
我正在用 gatsby 创建一个新项目gatsby new YourProjectName2 https://github.com/Vagr9K/gatsby-advanced-starter并得到一
我想切换构建节点并将整个工作区转移到新节点。 node('node1') { ... stash 'my_workspace' } node('node2') { ...
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.getEditorKit()方法的一些代码示例,展示了Workspace.getEdi
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.getViewManager()方法的一些代码示例,展示了Workspace.getV
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.getStatusArea()方法的一些代码示例,展示了Workspace.getSt
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.save()方法的一些代码示例,展示了Workspace.save()的具体用法。这些
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.installLookAndFeelMenu()方法的一些代码示例,展示了Worksp
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.setLayout()方法的一些代码示例,展示了Workspace.setLayout
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.changeFontSize()方法的一些代码示例,展示了Workspace.chan
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.getTitle()方法的一些代码示例,展示了Workspace.getTitle()
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.initialiseExtraMenuItems()方法的一些代码示例,展示了Work
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.add()方法的一些代码示例,展示了Workspace.add()的具体用法。这些代码
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.showResultsView()方法的一些代码示例,展示了Workspace.sho
本文整理了Java中org.protege.editor.core.ui.workspace.Workspace.adjustBorder()方法的一些代码示例,展示了Workspace.adjust
我是一名优秀的程序员,十分优秀!