IDEA——工程项目的两种窗口开发模式

文章目录

  • 引言
  • 一、多项目窗口模式的便利
    • 1.1 源码 debug
  • 二、多项目窗口模式的弊端
  • 三、多项目窗口的版本管理
  • 四、单项目、多项目窗口模式转换

引言

idea编辑器有两种窗口模式,一种是单项目窗口,另一种是多项目窗口
我个人使用较多的是单项目窗口,即一个微服务项目,或单体项目一个独立的idea窗口。此模式好处有两方面,一是开发者可以更专注特定的工程,不会因为工程太多产生混淆;二是在mave依赖自动刷新开启时,可以较快的打开工程,避免窗口内太多的工程刷新Maven依赖而产生卡顿。

但是最近在开发多依赖项目时,在两三个项目之间切换也确实不太方便。于是使用了一下多项目窗口模式,整体感官还算不错。所以,未来我的编程模式可能会依此有所变化:对于独立的功能开发,我可能依然倾向于使用单窗口模式,而对于需要同时修改多个项目,而且还彼此有所依赖的情况,我则更多的使用多窗口模式。

当然,在多窗口模式开发完成之后,也可以将窗口内的其他项目 unlink 轻松去掉,不会影响任何代码逻辑。

一、多项目窗口模式的便利

1.1 源码 debug

这一点我要强烈推荐!

如果你的项目中,A依赖B,即A项目使用了B项目中的方法、属性、类等信息,那么在需要同时开发A、B两个项目时,B需要先 mvn install 到本地仓库,然后A项目 reload B的依赖才能生效。

实际上,在单窗口模式下,debug如果从A项目进入到B中的方法,我们看到的实际上是一堆编译后的class 文件,断点也只能打在 class 文件中。

而使用多窗口模式,A项目的代码可以直接链接B项目的源码,即编译前的文件,debug时,也可以直接将断点打在B项目的源文件中,方便快速发现问题,修改。

这一点在实际debug A B 两个项目时,着实提升了不小的工作效率,比起习惯的单窗口模式,直接将断点打在源码上的效果,肯定要比打在class 文件中的感官要好很多。

注意,需要着重说明的是,项目的依赖本身没有变化。即A项目还是依赖B项目的class文件,这点是maven,或者说是Java 本身的依赖机制决定的。也就是说,在运行时,A、B 项目实际上都是运行的class文件,debug看到的数据和调用链,只是开发工具通过jvm相关协议,将JVM的内存(如 堆、栈、计数器、方法区等)数据映射到对应的源码中

所以,我们debug时,确实可以直接跳转到 B 项目的源码,但如果你修改了B的代码,若想生效,请记得重新 mvn clean install,否则,你 debug 的代码信息只是上一次 install 的class文件,就会出现debug断点无效的情况,如下图所示:
在这里插入图片描述

二、多项目窗口模式的弊端

简单说,项目太多,如果都是一些不需要开发的项目,idea启动压力大,同时开发时混乱不堪,容易出错。

三、多项目窗口的版本管理

在这里插入图片描述
如上图所示,左上角的project视图有两个maven工程,procurement-contract 合同工程,简称C工程,procurement-contract-framework 模板工程,简称 T 工程。合同依赖模板,即 C 依赖 T。

左下角git主窗口,会将所有的工程分支展示到 History 中,上图中 913 是T工程分支,912是C工程分支。另外,如果希望只查看某个项目的 git history,可以在左上project 视图中,选中项目名称,右键找到 Git–>show history,或直接找到工具栏上的 show histroy 按钮。

右下角的当前分支提示信息,上图中展示的是 913分支因为主窗口打开的文件是C工程,即procurement-contract 合同工程。因此,当我们切换主窗口的文件时,右下角的当前分支提示,会定位到打开文件所属工程项目的分支

对于修改的文件,如下图commit 视图所示:
切换选中文件,并不会改变当前分支提示信息,当前分支提示只随主窗口打开文件而改变。
不过为了防止不同的项目文件commit时出现错乱(当然git肯定不会错乱,错乱的肯定是人),建议选中文件后,打开最上方的路径提示,此路径提示会随选中的文件动态变化,然后双击路径最后的文件在主窗口打开,查看当前分支提示信息,避免提交到错误的分支上。
在这里插入图片描述

四、单项目、多项目窗口模式转换

添加其他项目时,在maven视图中,找到加号(如下图所示),点击添加maven项目:
在这里插入图片描述
去除其他项目时,maven视图中,选中要去除的项目,右键点击 Unlink 选项,即可。只是解除当前窗口与此项目的链接,并不会真正的删除项目,就算有未提交代码,也不会丢失。
在这里插入图片描述
建议在有依赖关系的多个项目中,使用多项目窗口,完全独立或不相关的项目,建议使用单项目窗口模式,只关注具体的业务开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 多线程 | 线程安全、死锁、线程同步

在前面的文章中我们讲述了锁的理解、原理、用户级线程库的内容,以及对Linux中的锁和线程进行了封装,本文中将继续对多线程的内容进行讲解。 可重入与线程安全 概念 线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见…

网络安全第一次作业

1、什么是防火墙 防火墙是一种网络安全系统,它根据预先确定的安全规则监视和控制传入和传出的网络流量。其主要目的是阻止对计算机或网络的未经授权的访问,同时允许合法通信通过。 防火墙可以在硬件、软件或两者的组合中实现,并且可以配置为根…

七绝 . 秋寒

题记 拜读署名“淡定人生D”近日发表在“ 今日头条 ”上的古体诗《七绝 . 凉》,本老朽在由衷赞叹该女子才貌双全之时,也对自己寄居养老的成都崇州街子古镇今日下午的秋寒突至天气,情怀涌动,思绪万千,亦作《七绝 . 秋寒…

JavaScript小案例-树形菜单(菜单数据为数组)

菜单层级理论上可以无限多&#xff0c;因为是递归渲染。 gif演示图&#xff1a; 代码&#xff1a; 树形菜单.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&quo…

超越创意,从用户创造内容到AI生成内容的新时代

在这个信息爆炸的时代&#xff0c;内容创作正经历前所未有的变革&#xff0c;其频率和多样性令人瞠目结舌。曾经&#xff0c;我们主要依赖传统媒体&#xff0c;需要专业团队为人们打造内容&#xff0c;这被称为专业生成内容&#xff08;PGC&#xff0c;Professional-generated …

MD5加密算法

1、简介 MD5在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明&#xff0c;经MD2、MD3和MD4发展而来。 MD5将任意长度的“字节串”变换成一个128bit的大整数&#xff0c;并且它是一个不可逆的字符串变换算法&#xff0c;换句话说就是&#xff0c;即使你看到源程序…

IO口电路种类

文章目录 参考1.高速振荡电路&#xff08;时钟IO引脚&#xff09;2.与 GPIO 功能共享的低速振荡电路&#xff08;子时钟IO&#xff09;3.CMOS 滞后输入引脚4.电源输入保护电路5.A/D 转换器 ref (AVRH)带保护电路的电源输入端6.CMOS 电平输出7.CMOS 电平输出&#xff0c;带有模…

sublime text3 设置代码错误提示之php

第一步&#xff1a; ctrlshiftp 输入 install package 并选中 第二步&#xff1a; 输入 sublimelinter-php 第三步&#xff1a; Prefernces> package Settings >Sublimelinter > settings 这里不同按照版本可能不一样 有些可能是 settings User 第四步 完成

Python 变量

视频版教程 Python3零基础7天入门实战视频教程 变量 无论使用什么语言编程&#xff0c;总要处理数据&#xff0c;处理数据就需要使用变量来保存数据。变量就像一个个小容器&#xff0c;用于“盛装”程序中的数据。 再说说&#xff0c;Python的数据类型&#xff0c;有以下六种…

分享一个基于uniapp+springboot技术开发的校园失物招领小程序(源码、lw、调试)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

TPU-MLIR——实现Chatglm2-6B大模型移植部署

TPU-MLIR——实现Chatglm2-6B大模型移植部署 本项目实现BM1684X部署语言大模型ChatGLM2-6B。通过TPU-MLIR编译器将模型转换成bmodel&#xff0c;并采用c代码将其部署到BM1684X的PCIE环境&#xff0c;或者SoC环境。 编译chatglm2-6B模型 1. 下载‘Chat-GLM2-6B’ 2. 对该模型…

谷歌版ChatGPT与旗下邮箱、视频、地图等,实现全面集成!

9月20日&#xff0c;谷歌在官网宣布推出Bard Extensions。借助该扩展用户可在谷歌的Gmail、谷歌文档、网盘、Google 地图、视频等产品中使用Bard。 Bard是谷歌基于PaLM 2大模型&#xff0c;打造的一款类ChatGPT产品&#xff0c;可自动生成文本、代码、实时查询信息等。新的集成…

数据结构与算法(C语言版)P5---栈

1、栈 1.1、栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。__进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。__栈中的数据元素遵守__后进先出&#xff08;先进后出&#xff09;__LIFO&#xf…

FPGA原理与结构(12)——FIFO IP核原理学习

系列文章目录&#xff1a;FPGA原理与结构&#xff08;0&#xff09;——目录与传送门 一、FIFO概述 1、FIFO的定义 FIFO是英文First-In-First-Out的缩写&#xff0c;是一种先入先出的数据缓冲器&#xff0c;与一般的存储器的区别在于没有地址线&#xff0c; 使用起来简单&…

BD就业复习第一天

hive 1.分区分桶 在Hive中&#xff0c;分区&#xff08;Partition&#xff09;和分桶&#xff08;Bucketing&#xff09;都是用于数据管理和查询性能优化的技术。它们有不同的用途和特点。 分区&#xff08;Partition&#xff09;&#xff1a; 定义&#xff1a;分区是将数据…

Hexo在多台电脑上提交和更新

文章目录 1.博客搭建2.创建一个新文件夹new&#xff0c;用于上传hexo博客目录3.github上创建hexo分支并设置为默认分支创建hexo分支将hexo分支设置为默认分支 4.进入新建的文件夹中git clone&#xff0c;再上传相关文件至hexo分支1.clone下来的文件夹内应该有个.gitignore文件&…

Springboot部署服务器项目上线

第一步&#xff0c;项目打包&#xff0c;有两种方式 第一种、直接在项目根目录打开终端&#xff0c;输入以下语句即可。如下图&#xff1a; mvn clean package -DskipTests 第二种、在右侧点击 Maven选项&#xff0c;选择鼠标左键双击package选项即可。如下图&#xff1a; 两…

Python 搭建编程环境

一、搭建编程环境 1、下载python 官网&#xff1a;https://www.python.org 2、开始安装 下载安装版本&#xff0c;双击下载的安装包&#xff0c;如下&#xff1a; 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 安装完成后执行下面的操作&#xff0c;判断是否…

面试官:说说Vue 3.0中Treeshaking特性?举例说明一下?

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、是什么 二、如何做 Vue2 项目 Vue3 项目 三、作用 一、是什么 Tree shaking 是一种通过清除多余代码方式来…

974. 和可被 K 整除的子数组

974. 和可被 K 整除的子数组 C代码&#xff1a;哈希表前缀和 typedef struct{int val;int cnt;UT_hash_handle hh; } HashTable;int subarraysDivByK(int* nums, int numsSize, int k){HashTable* head NULL;HashTable* out NULL;int sum 0;int cnt 0;out (HashTable*)ma…